Dies ist eine Technik, die von der JavaScript-Engine hoisting verwendet wird. Der Parser wird die gesamte Funktion vor dem Ausführen durchlesen, und alle Variablendeklarationen (d. H. Unter Verwendung des Schlüsselworts var
) werden so ausgeführt, als ob sie sich an der Spitze des enthaltenden Bereichs befinden. So Ihr Code verhält sich wie:
var country;
var i;
country = "USA";
switch (country) {
case "USA":
country = i;
case "blach":
//not finished yet
}
i = 10;
So i
über den gesamten Umfang deklariert ist, aber sein Wert ist undefined
, bis die i = 10
Anweisung ausgeführt.
In ECMAScript-Termen, wenn eine Funktion aufgerufen wird, erstellt der neue lexikalische Bereich der Funktion VariableEnvironment
, bevor einer der Code der Funktion ausgeführt wird. In ECMAScript 10.5, step 8:
8. Für jeden VariableDeclaration ... d in Code, in Quelltext tun, um
ein. Lassen Sie dn der Bezeichner in d sein.
...
i. Rufen Sie env 's CreateMutableBinding konkrete Methode über die dn und konfigurableBindings als Argumente.
ii. Rufen Sie env 's SetMutableBinding konkrete Methode, die dn, undefined
und strenge als Argumente übergeben.
Dies ist ein ganz Bissen, aber im Grunde sagt es:
Bevor Sie eine Funktion ausführen, schauen Sie durch den Quellcode der Funktion für Erklärungen wie var [identifierName]
.
Für jede Erklärung Sie, erstellen Sie eine neue Variable in der Funktion des Oszilloskops mit dem Namen [identifierName]
verwendete in der Deklaration und dann seinen Wert auf undefined
Sorry, aber ich fühlte, dass diese Frage nicht "genug Forschung Aufwand" zeigt. [Variable scope] (http://en.wikipedia.org/wiki/Scope_ (computer_science) #JavaScript) ist grundlegendes Programmierwissen. Einfach den Code ausführen, sollte bewiesen haben, dass das erlaubt war. Die Frage ist wahrscheinlich "wie lautet der technische Ausdruck für die Verwendung von Variablen, bevor sie deklariert werden". Fühlen Sie sich frei, die Frage zu bearbeiten, und der Downvote könnte verschwinden. Ich werde darauf hinweisen, dass sogar [diese] (http://stackoverflow.com/questions/500431/javascript-variable-scope) JavaScript-Frage keine Erwähnung von _hoisting_ hat. – andyb