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);
- A.
60,40 - B.
undefined,10 - C.
50,10 - D.
null,40
Respuesta en el primer comentario.
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (2)
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...
Respuesta:
60,40Las variables declaradas con
letyconsttienen 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 bloqueifo 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 = 10es una variable global, puesto que no esta encerrada en ningún tipo de bloque.Dentro del
if:En el bloque del
ifno se tiene acceso a ninguna variablex, por lo tanto javascript subirá al siguiente contexto para buscar una variablex, al encontrarla recien realiza la sumax + y + zque sería60.En el último
console:La variable
xesta en el contexto global, por ende accedemos a su valor sin problema alguno.La variable
zesta dentro del bloqueify no deberiamos poder acceder a ella, perozesta declarada convar, esto la convierte en una variable con contexto de función y no de bloque, entonces accedemos a su valor, para poder sumarx + zque sería40.