He escuchado que el acceso lety los constvalores antes de que se inicialicen pueden causar algo ReferenceErrordebido a la llamada zona muerta temporal .
¿Cuál es la zona muerta temporal, cómo se relaciona con el alcance y la elevación, y en qué situaciones se encuentra?
                    
                        javascript
                                ecmascript-6
                                const
                                let
                                
                    
                    
                        joews
fuente
                
                fuente

Respuestas:
letyconsttienen dos grandes diferencias devar:varantes de que se declare tiene el resultadoundefined; el acceso a unaletoconstantes de que sea declarada lanzaReferenceError:A partir de estos ejemplos, parece que las
letdeclaraciones (yconst, que funcionan de la misma manera) no se pueden izar , ya queaLetque no parece existir antes de que se le asigne un valor.Sin embargo, ese no es el caso,
letyconstse izan (comovar,classyfunction), pero hay un período entre el ingreso al alcance y la declaración donde no se puede acceder. Este período es la zona muerta temporal (TDZ) .El TDZ finaliza cuando
aLetse declara , en lugar de asignarse :Este ejemplo muestra que
letse iza:Crédito: Temporal Dead Zone (TDZ) desmitificado
Acceder
xen el ámbito interno todavía causa aReferenceError. Siletno se izara, se registraríaouter value.El TDZ es bueno porque ayuda a resaltar errores: el acceso a un valor antes de que se haya declarado rara vez es intencional.
La TDZ también se aplica a los argumentos de función predeterminados. Los argumentos se evalúan de izquierda a derecha, y cada argumento está en la TDZ hasta que se asigna:
El TDZ no está habilitado por defecto en el transpilador babel.js. Active el modo "alto cumplimiento" para usarlo en REPL . Proporcione la
es6.spec.blockScopingbandera para usarla con la CLI o como biblioteca.Lecturas recomendadas adicionales: TDZ desmitificado y ES6 Let, Const y la "Temporal Dead Zone" (TDZ) en profundidad .
fuente
let fooen un bloque hace que se levante y se declare en la parte superior de ese bloque. La línea delet foohace que se inicialice. Yfoo = xyzhace que se le asigne un valor.Izado:
let,const,varson todos procesos izada a conseguir.(lo que significa que suben y declaran en la parte superior del alcance).
Inicialización
varpasar también por el proceso inicial y obtener el valor inicial deundefined.let,constno se lanzó el proceso inicial, por lo que sus valores aún son inaccesibles, aunque ya lo declararon. en qué los colocastemporal dead zoneEntonces en breve:
fuente
En el caso de las variables let y const, Básicamente, Temporal Dead Zone es una zona
"antes de que se declare tu variable",
es decir, donde no puede acceder al valor de estas variables, arrojará un error.
ex.
el código anterior da un error
el mismo código no dará un error cuando usamos var para la variable 'a',
ex.
fuente
undefinedy5). La declaración devar aes izada, el código de inicialización establecidoaen 5 no lo es.