Heben in Javascript === Kompilieren?

9

Bei einem Vorstellungsgespräch bin ich kürzlich auf eine interessante Perspektive gestoßen.

Beim Heben in Javascript werden die Variablendeklarationen und die Funktionsdeklaration oben im Skript verschoben. Können wir diese Phase als Zusammenstellung bezeichnen ?

Mir ist bekannt, dass der Javascript-Interpreter zwei Durchgänge über das Eingabeskript hat, wobei er im ersten Durchgang das Skript anhebt und im zweiten Durchgang das Skript tatsächlich ausführt. Nachdem ich wusste, dass Javascript eine interpretierte Sprache ist, hat mich diese Frage etwas verwirrt.

Rahul Desai
quelle

Antworten:

18

Heben ist keine Zusammenstellung.

Hoisting ist ein Konzept, das von Entwicklern erstellt wurde, um zu erklären, was während der Kompilierung passiert, wenn Variablen und Funktionsdeklarationen an den Anfang ihres enthaltenen Bereichs verschoben werden.

Kompilierung ist das, was passiert, wenn Ihr Javascript-Code in eine andere Darstellung (normalerweise eine Art ausführbaren Code) umgewandelt wird, die entweder jetzt oder später ausgeführt wird. Die V8-Javascript-Engine von Chrome verfügt tatsächlich über zwei Compiler. Eine, um jetzt schnellen und schmutzigen ausführbaren Code zu erstellen, die andere, um später optimierten Code zu erstellen.

Programmiersprachen werden nicht als "kompilierte" oder "interpretierte" Sprachen definiert. Vielmehr werden Sprachen nach Bedarf interpretiert oder kompiliert.

Weiterführende Literatur
Heben in Javascript Funktionsweise
der V8-Engine

Robert Harvey
quelle
1
Der Wikipedia-Artikel über interpretierte Sprachen ist auch hilfreich für die Unterscheidung zwischen "interpretiert" und "kompiliert": en.wikipedia.org/wiki/Interpreted_language
Wenn ich das richtig verstehe, konvertiert Hoisting das Skript nicht in maschinenlesbaren Code, daher ist es keine Kompilierung . Habe ich recht? :)
Rahul Desai
Lesen Sie den zweiten Absatz meiner Antwort noch einmal.
Robert Harvey
1
In meinem letzten Gespräch mit diesem Interviewer über dieses Thema gab er mir den Verweis auf den Advanced JS-Kurs auf FrontendMasters.com, in dem Kyle Simpson erklärt, dass es sich um eine Kompilierung handelt, in dem Sinne, dass wir dies beispielsweise mit Bash-Skripten vergleichen Ich würde nicht wissen, was in Zeile 4 zu erwarten ist, während es sich in Zeile 3 befindet. Im Fall des JS-Compilers hat er jedoch bereits während des Hubvorgangs gesehen, was sich in Zeile 4 befindet. Es ist nur so, dass es im Gegensatz zu anderen Sprachen nicht in Binärcode konvertiert wird. Javascript wird bei jeder Ausführung kompiliert.
Rahul Desai