¿Por qué JavaScript eleva las variables?
¿Cuál fue la razón fundamental de los diseñadores cuando decidieron implementar la elevación? ¿Hay otros lenguajes populares que hagan esto?
Proporcione enlaces relevantes a documentación y / o registros.
¿Por qué JavaScript eleva las variables?
¿Cuál fue la razón fundamental de los diseñadores cuando decidieron implementar la elevación? ¿Hay otros lenguajes populares que hagan esto?
Proporcione enlaces relevantes a documentación y / o registros.
div
en jQuery
Respuestas:
Como explica Stoyan Stefanov en el libro "Patrones JavaScript", la elevación es el resultado de la implementación del intérprete JavaScript.
La interpretación del código JS se realizó en dos pasadas. Durante la primera pasada, el intérprete procesa declaraciones de función y variable.
El segundo paso es el paso de ejecución del código real. El intérprete procesa expresiones de función y variables no declaradas.
Por lo tanto, podemos utilizar el concepto de "elevación" para describir tal comportamiento.
"Var izar fue por lo tanto [una] consecuencia involuntaria de la función de elevación, sin alcance de bloque, [y] JS como un trabajo urgente de 1995".
"función de elevación permite la descomposición del programa de arriba hacia abajo, 'dejar rec' gratis, llamar antes de declarar; var izar etiquetado."
No conozco otros lenguajes populares que eleven variables de la misma manera. Creo que incluso ActionScript, otra implementación de ECMAScript utilizada en el desarrollo de Flash, no implementó la elevación. Esto ha sido una fuente de confusión y frustración para los desarrolladores familiarizados con otros lenguajes que están aprendiendo JavaScript.
ACTUALIZACIÓN: A partir de los comentarios, Python tiene un comportamiento de elevación de variables similar .
Esto se debe a que el intérprete de JavaScript interpreta el código en dos ciclos.
En el 1er ciclo, todas las declaraciones de variables y funciones se llevan a la parte superior del alcance de la función en el que se está ejecutando. Esto ayuda a crear variableObjects
paraexecution context
función incluso antes de su ejecución.
En la segunda fase, las asignaciones de valores, las declaraciones de código y las llamadas a funciones se llevan a cabo línea por línea de la manera esperada.
Tienes una lectura un poco más detallada aquí.
Se le dará una mejor imagen en todo alrededor de la conducta let
, const
y class
las declaraciones, también la precedencia se sigue entre variables y funciones.