¿Por qué javascript eleva las variables let y const y no podemos alcanzarlas hasta la inicialización y, de esta manera, finaliza la zona muerta temporal? ¿Hay algún beneficio particular para este comportamiento? ¿Por qué js no los deja sin alojamiento en ellos?
Porque cuando sombrea una variable, no estaría claro a qué variable se referiría un identificador en la zona muerta temporal, especialmente porque las variables declaradas con var también se elevan. Como tales, let y const son coherentes con var , ya que también se elevan, pero son más restrictivos en situaciones en las que var ha mostrado un comportamiento confuso.
let val = "a"; { console.log(val); let val = "b"; }Los lenguajes de programación generalmente tienen una tradición como que las variables deben definirse en la parte superior. Detrás de escena, JS también es parte de esta tradición. Levanta var a la parte superior y lo establece en undefined hasta que se define. Este comportamiento puede tener consecuencias no deseadas porque JS intentará como si fuera solo una variable normal e intentará hacer algo con eso indefinido; sin embargo, dado que no hay nada, obtendrá un error. Así que introdujeron las palabras clave let y const para evitar este mal comportamiento y dijeron que estos también son polipastos y los configuramos como no uninitiliazed y no puedes usarlos hasta que estén asignados a algo porque eso no tiene sentido, ¿por qué querrías usar una variable antes de que se asigna a algo?
wall hace que las cosas sean más claras: a veces tienes que declarar el mismo nombre de variable varias veces y no quieres mezclar sus valores
-cuando usa var , se declara en un ámbito global y después de que la función se ejecuta correctamente, no borra la memoria, permanece allí en este caso si tiene muchas variables que requieren demasiada memoria afectará el rendimiento de su aplicación
en tu caso:-
let val = "a"; // this let have globle scope { console.log(val); let val = "b"; // this let have local scope that going to be clear from memory when this brakets endes }Conclusión:-
var is a global scope let & const are BLOCK scope that going to be clear after brackets ended