Como sabemos, las declaraciones de var se elevan pero con un valor undefined :
console.log(a); // undefined var a = 2 function foo() { console.log(a); } function bar() { var a = 3; foo(); } var a = 2; bar(); // 2 ¿Por qué registra 2 en lugar de undefined ?
¿Por qué el valor de var a se volvió mágicamente accesible antes de su declaración?
Está llamando a bar() después de inicializar la variable, por lo que ya no está undefined .
Vea este ejemplo más simple:
function foo() { console.log(a); } foo(); // a is not yet initialized, prints undefined var a = 2; foo(); // a is now initialized, prints 2Elevar solo hace que la declaración de la variable esté disponible (para que no obtenga un error de "Variable no definida"). La inicialización es solo una asignación que ocurre en el orden normal.