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.


Discussion (2)

Collapse
duxtech profile image
Cristian Fernando Author • Edited on

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...