Levantando en Javascript === Compilando?

9

Encontré una perspectiva interesante en una entrevista de trabajo reciente.

La elevación en Javascript se trata de mover las declaraciones de variables y la declaración de función en la parte superior del script. ¿Podemos llamar a esta fase como compilación ?

Soy consciente del hecho de que el intérprete de Javascript tiene 2 pases sobre el script de entrada, donde en el primer paso se iza y el segundo paso realmente ejecuta el script. Sabiendo que Javascript es un lenguaje interpretado, esta pregunta me confundió un poco.

Rahul Desai
fuente

Respuestas:

18

No. La elevación no es una compilación.

La elevación es un concepto creado por los desarrolladores para explicar lo que sucede durante la compilación cuando las variables y las declaraciones de funciones se mueven a la parte superior de su ámbito de contención.

La compilación es lo que sucede cuando su código Javascript se convierte en otra representación (generalmente algún tipo de código ejecutable), para ejecutarse ahora o más tarde. El motor Javascript V8 de Chrome en realidad tiene dos compiladores; uno para crear código ejecutable rápido y sucio ahora, el otro para crear código optimizado más adelante.

Los lenguajes de programación no se definen como lenguajes "compilados" o "interpretados". Por el contrario, los idiomas se interpretan o compilan según sea necesario.

Lectura adicional
Levantamiento en Javascript
Cómo funciona el motor V8

Robert Harvey
fuente
1
El artículo de Wikipedia sobre idiomas interpretados también es útil en la distinción "interpretado" vs. "compilado": en.wikipedia.org/wiki/Interpreted_language
Si entiendo esto correctamente, Hoisting no convierte el script en código legible por máquina, por lo que no es una compilación . Estoy en lo cierto? :)
Rahul Desai
Lea el segundo párrafo de mi respuesta nuevamente.
Robert Harvey
1
En mi conversación reciente con ese entrevistador sobre este tema, me dio la referencia al curso Advanced JS en FrontendMasters.com donde Kyle Simpson explica que es una compilación, en el sentido de que si comparamos esto con las secuencias de comandos Bash, por ejemplo, no sabría qué esperar en la línea # 4 mientras está en la línea # 3. Sin embargo, en el caso del compilador JS, ha visto lo que está en la línea # 4 anteriormente durante el pase de elevación. Es solo que no se convierte en código binario a diferencia de otros idiomas. Javascript se compila cada vez que se ejecuta.
Rahul Desai