Elevación de Javascript y declaración de alcance global

Aug 21 2020

En javascript, la fase de compilación busca y asocia todas las declaraciones con sus alcances apropiados.

CASO 1

a = 2;
console.log(a);

Si no se utiliza en modo estricto, se supone que el fragmento se procesa realmente como:

var a;
a = 2;
console.log(a);

Salida: 2

CASO2

si la declaración ocurre debajo de console.log ()

  console.log(a); 
  var a = 2;

Aquí en la línea 1: el compilador verificará la declaración de a en su alcance si no se encuentra, el alcance global asignará uno y el mismo código se asumirá nuevamente como

   var a; 
   console.log(a);
   a = 2;

Salida: indefinido // ya que no se asigna ningún valor mientras el intérprete lee la consola

CASO3

 console.log(a); 
 a = 2;

Salida: RefErr

¿Por qué esto arroja un error de referencia y no indefinido?

Respuestas

1 AbhishekJain Aug 21 2020 at 14:19

Si observa detenidamente sus dos primeros casos, siempre está declarando la variable a, y en JavaScript solo se incluyen las declaraciones.

Dicho esto, en su Case 3, la variable anunca se declara, por lo tanto, la elevación no es posible aquí. Con esto, no hay una variable por el nombre aen el ámbito de aplicación, y por lo tanto, ReferenceError.

Si observa la descripción de ReferenceError , se lee:

El objeto ReferenceError representa un error cuando se hace referencia a una variable inexistente.

1 Quentin Aug 21 2020 at 14:12

Los globales implícitos no implican una vardeclaración. No hay que izarlos.