En Documentaion se dice que let y const se izan.
Las variables declaradas con let y const también se elevan pero, a diferencia de var, no se inicializan con un valor predeterminado. Se lanzará una excepción si se lee una variable declarada con let o const antes de que se inicialice.
También hay una muestra bastante clara allí:
console.log(num); // Throws ReferenceError exception as the variable value is uninitialized let num = 6; // InitializationPero no entiendo por qué esto aumenta el ReferenceError también:
x = 9 console.log(x) // Why: "Throws ReferenceError exception as the variable value is uninitialized" here ? let x;Las especificaciones dicen 'let' admite izaje. La inicialización va antes de usar esta variable. ¿Qué ocurre? Si el motivo de ReferenceError es TDZ, ¿por qué en las especificaciones dice que 'let' admite hoising, porque TDZ y hoising son cosas mutuamente excluyentes ... Y cuál podría ser un ejemplo de hoising para 'let' si no puedo usar esta variable antes de la declaración...
¿Por qué lanza la excepción ReferenceError ya que el valor de la variable no está inicializado aquí, en la línea
console.log?
no lo hace Lo lanza al acceder a la variable, que incluye la asignación:
x = 9; // exception happens here already! let x; No puede usar una variable no inicializada en absoluto. Solo se inicializa cuando se evalúa la instrucción let / const .
¿Cuál podría ser un ejemplo de elevación de 'let' si no puedo usar esta variable antes de la declaración?
No puede usarlo, pero puede hacer referencia a él, por ejemplo, creando un cierre sobre él:
function log() { console.log(x); } // log(); - would fail here let x = 9; log(); También significa que referirse a x en realidad se referirá a esa variable no inicializada, no a otra x de un ámbito externo. Consulte ¿Se declaran las variables con let o const izadas? para más.