A continuación tengo 2 líneas de código sencillas y sencillas. Pero puedo garantizarle que lo confundirá mucho (por ejemplo, porque ignoró el principio subrayado de JS) o lo consolará.
Pero tiene conceptos de conocimiento completamente cargados como se muestra a continuación
Mi declaración contradictoria
como var, const y let también aumentan sus propiedades, pero están en zonas diferentes.
lifting Def (versión simple/laico)
Ahora es el momento de profundizar en cómo Js compila y ejecuta nuestro código de 2 líneas
En JavaScript, la forma en que el compilador y el motor manejan las declaraciones y asignaciones de variables puede tener matices, especialmente cuando se trata de let y var.
Analicemos el proceso desde la perspectiva del compilador y de la ejecución para el código dado:
name = 'ashu'; let name;
en este punto, dejo en claro que cuando escribimos el código javascript, el primer analizador y compilador compila nuestro código y luego pasa a la fase de ejecución.
Perspectiva del compilador
Primera línea: nombre = 'ashu';
Durante la fase de compilación,
el motor JavaScript analiza el código y crea los ámbitos necesarios.
El nombre de la tarea = 'ashu';
se anotará, pero en esta etapa, el motor no ejecuta el código; simplemente registra la existencia de una asignación a una variable denominada nombre.
Si el nombre no se ha declarado antes, el compilador lo trata como una asignación a una variable global (nombre var en el ámbito global) ya que las declaraciones var se elevan y son accesibles globalmente.
Segunda línea: let name;
Cuando el compilador encuentra el nombre let; declaración, reconoce que nombre debe tener un alcance de bloque.
El compilador coloca el nombre en la Zona Muerta Temporal (TDZ) para el ámbito al que pertenece,
lo que significa que reconoce la existencia del nombre pero lo marca como no inicializado.
La declaración let no se eleva de la misma manera que var.
En su lugar, crea un enlace en el alcance y lo inicializa solo cuando se ejecuta la declaración.
Perspectiva de ejecución
Primera línea: nombre = 'ashu';
Cuando el motor JavaScript ejecuta la asignación nombre = 'ashu';,
comprueba la existencia del nombre en el ámbito actual. Dado que el nombre se declara con let pero se encuentra en TDZ (Zona muerta temporal), cualquier intento de acceder a él antes de que se inicialice la declaración let resultará en un Error de referencia.
Por lo tanto, en este punto, el nombre está en la TDZ y la asignación nombre = 'ashu'; da como resultado un ReferenceError.
Segunda línea: let name;
Esta línea inicializa la variable de nombre dentro del alcance del bloque.
Después de este punto, el nombre ya no está en la TDZ y se puede acceder a él o asignarlo sin errores.
Ahora consejo adicional
diferencia entre no declarado, indefinido y no inicializado;
undeclare: - la variable aún no está declarada.
indefinido :- Variable declarada pero no inicializada;
no inicializado: - variable definida pero su valor aparecerá más adelante.
Ej:- resultado constante = multiplicarBy2(5);
hasta que el valor de retorno de la función se asigne al resultado, hasta ese punto estará en una zona no inicializada.
Dato interesante:-
Conoces la zona muerta temporal inicialmente decorada para Const pero más tarde la adoptaron en **Let**
Referencia:-
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3