DEV Community

Cristian Fernando
Cristian Fernando

Posted on

Paracetamol.js💊| #31: Explica este código JavaScript

Explica este código JavaScript

let x = 10;
if (true) {
  let y = 20;
  var z = 30;
  console.log(x + y + z);
}
console.log(x + z);
Enter fullscreen mode Exit fullscreen mode
  • A. 60, 40
  • B. undefined, 10
  • C. 50, 10
  • D. null, 40

Respuesta en el primer comentario.


Top comments (2)

Collapse
 
duxtech profile image
Cristian Fernando • Edited

Respuesta:

  • A. 60, 40

Las variables declaradas con let y const tienen un contexto de bloque, esto significa que solo podrán ser accedidas dentro del bloque de llaves donde fueron declaradas, por ejemplo dentro de un bloque if o dentro de una función.

Esta premisa se cumple siempre y cuando esten declaradas dentro de un bloque, si una variable esta fuera de todo bloque entonces se dice que es una variable global y por ende puede ser accedida desde cualquier parte del código.

let x = 10 es una variable global, puesto que no esta encerrada en ningún tipo de bloque.

Dentro del if :

console.log(x + y + z);
Enter fullscreen mode Exit fullscreen mode

En el bloque del if no se tiene acceso a ninguna variable x, por lo tanto javascript subirá al siguiente contexto para buscar una variable x, al encontrarla recien realiza la suma x + y + z que sería 60.

En el último console:

console.log(x + z);
Enter fullscreen mode Exit fullscreen mode

La variable x esta en el contexto global, por ende accedemos a su valor sin problema alguno.

La variable z esta dentro del bloque if y no deberiamos poder acceder a ella, pero z esta declarada con var, esto la convierte en una variable con contexto de función y no de bloque, entonces accedemos a su valor, para poder sumar x + z que sería 40.

Collapse
 
taneros profile image
Renatik

var z actually gets hoisted to the outer scope but you said function context (var, esto la convierte en una variable con contexto de función y no de bloque,)
I think you are confusing notions of context and scope... or maybe in Spanish 'context' means scope...