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
Arham Rumi -
Jackson Kasi -
Sam -
Amin I. -
Top comments (2)
Respuesta:
60
,40
Las variables declaradas con
let
yconst
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 bloqueif
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
:En el bloque del
if
no 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 + z
que sería60
.En el último
console
:La variable
x
esta en el contexto global, por ende accedemos a su valor sin problema alguno.La variable
z
esta dentro del bloqueif
y no deberiamos poder acceder a ella, peroz
esta 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 + z
que sería40
.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...