regresar a la lección

¿Es visible la variable?

importancia: 4

¿Cuál será el resultado de este código?

let x = 1;

function func() {
  console.log(x); // ?

  let x = 2;
}

func();

P.D Hay una trampa en esta tarea. La solución no es obvia.

El resultado es: error.

Intenta correr esto:

let x = 1;

function func() {
  console.log(x); // ReferenceError: No se puede acceder a 'x' antes de la inicialización
  let x = 2;
}
func();

En este ejemplo podemos observar la diferencia peculiar entre una variable “no existente” y una variable “no inicializada”.

Como habrás leído en el artículo Ámbito de Variable y el concepto "closure", una variable comienza en el estado “no inicializado” desde el momento en que la ejecución entra en un bloque de código (o una función). Y permanece sin inicializar hasta la correspondiente declaración let.

En otras palabras, una variable técnicamente existe, pero no se puede usar antes de let.

El código anterior lo demuestra.

function func() {

// la variable local x es conocida por el motor desde el comienzo de la función,
// pero "unitialized" (inutilizable) hasta let ("zona muerta")
// de ahí el error

  console.log(x); // ReferenceError: No se puede acceder a 'x' antes de la inicialización

  let x = 2;
}

Esta zona de inutilización temporal de una variable (desde el comienzo del bloque de código hasta let) a veces se denomina" zona muerta ".