Hisser en Javascript === Compiler?

9

J'ai rencontré une perspective intéressante lors d'un récent entretien d'embauche.

Hisser en Javascript consiste à déplacer les déclarations de variable et la déclaration de fonction en haut du script. Pouvons-nous appeler cette phase une compilation ?

Je suis conscient du fait que l'interpréteur Javascript a 2 passes sur le script d'entrée où dans la première passe il fait le levage et la seconde passe il exécute réellement le script. Ayant su que Javascript est un langage interprété, cette question m'a un peu dérouté.

Rahul Desai
la source

Réponses:

18

Non. Le levage n'est pas une compilation.

Le levage est un concept qui a été créé par les développeurs pour expliquer ce qui se passe lors de la compilation lorsque les variables et les déclarations de fonction sont déplacées vers le haut de leur portée.

La compilation est ce qui se passe lorsque votre code Javascript est transformé en une autre représentation (généralement une sorte de code exécutable), pour être exécuté maintenant ou plus tard. Le moteur Javascript V8 de Chrome a en fait deux compilateurs; l'un pour créer du code exécutable rapide et sale maintenant, l'autre pour créer du code optimisé plus tard.

Les langages de programmation ne sont pas définis comme des langages «compilés» ou «interprétés». Les langues sont plutôt interprétées ou compilées selon les besoins.

Lectures complémentaires
Levage en Javascript
Fonctionnement du moteur V8

Robert Harvey
la source
1
L'article de wikipedia sur les langues interprétées est également utile sur la distinction "interprété" vs "compilé": en.wikipedia.org/wiki/Interpreted_language
Si je comprends bien, Hoisting ne convertit pas le script en code lisible par machine, il ne s'agit donc pas d'une compilation . Ai-je raison? :)
Rahul Desai
Relisez le deuxième paragraphe de ma réponse.
Robert Harvey
1
Dans ma récente conversation avec cet intervieweur sur ce sujet, il m'a donné la référence au cours Advanced JS sur FrontendMasters.com où Kyle Simpson explique qu'il s'agit d'une compilation, en ce sens que si nous comparons cela au script Bash, par exemple, il Je ne saurais pas à quoi m'attendre sur la ligne n ° 4 alors qu'il se trouve sur la ligne n ° 3. Cependant, dans le cas du compilateur JS, il a vu ce qui se trouve sur la ligne n ° 4 plus tôt lors de la passe de levage. C'est juste qu'il n'est pas converti en code binaire contrairement aux autres langages. Javascript est compilé à chaque exécution.
Rahul Desai