Warum hebt JavaScript Variablen an?
Was war das Grundprinzip der Designer, als sie beschlossen, das Heben zu implementieren? Gibt es andere beliebte Sprachen, die dies tun?
Bitte geben Sie relevante Links zu Dokumentationen und / oder Aufzeichnungen an.
javascript
hoisting
Xlaudius
quelle
quelle
div
in jQueryAntworten:
Wie Stoyan Stefanov im Buch "JavaScript Patterns" erklärt, ist das Heben das Ergebnis der Implementierung eines JavaScript-Interpreters.
Die JS-Code-Interpretation wurde in zwei Durchgängen durchgeführt. Während des ersten Durchgangs verarbeitet der Interpreter Variablen- und Funktionsdeklarationen.
Der zweite Durchgang ist der eigentliche Codeausführungsschritt. Der Interpreter verarbeitet Funktionsausdrücke und nicht deklarierte Variablen.
Daher können wir das "Hebe" -Konzept verwenden, um ein solches Verhalten zu beschreiben.
quelle
JS-Schöpfer Brendan Eich sagte einmal (auf Twitter) :
Er erklärte auch, dass ...
Gibt es andere beliebte Sprachen, die dies tun?
Ich kenne keine anderen populären Sprachen, die Variablen auf die gleiche Weise heben.Ich denke, selbst ActionScript - eine andere Implementierung von ECMAScript, die in der Flash-Entwicklung verwendet wird - hat das Heben nicht implementiert. Dies war eine Quelle der Verwirrung und Frustration für Entwickler, die mit anderen Sprachen vertraut sind, die JavaScript lernen.UPDATE: Aus den Kommentaren geht hervor, dass Python ein ähnliches Verhalten beim variablen Heben aufweist .
quelle
Dies liegt daran, dass der Javascript-Interpreter den Code in zwei Zyklen interpretiert.
Im ersten Zyklus alle Variable und Funktionsdeklarationen sind auf der Oberseite des Funktionsumfangs genommen es in ausgeführt wird . Dies hilft bei der Erstellung
variableObjects
fürexecution context
Funktions , noch bevor es die Ausführung.In der 2. Phase erfolgen Wertzuweisungen, Code-Anweisungen und Funktionsaufrufe erwartungsgemäß zeilenweise.
Sie haben hier etwas ausführlicher gelesen .
Es werden Ihnen ein besseres Bild um Verhalten um
let
,const
undclass
Erklärungen, auch den Vorrang es zwischen variablen und Funktionen folgt.quelle