Heim >Web-Frontend >js-Tutorial >JavaScript heben - Was bewegt sich und was bleibt
Der Verbesserungsmechanismus von
JavaScript ist wie die Einstellung des Bühnenspiels. Bevor der Code ausgeführt wird (in der "Erstellungsphase"), wird JavaScript die gesamte Erklärung auf die Spitze seines Geltungsbereichs erhöhen, genau wie das Bühnenpersonal die Requisiten in die angegebene Position verschiebt, bevor der Vorhang erhöht wird. Der einzige Unterschied besteht darin, dass nur die Aussage erhoben wird und die Initialisierung nicht verbessert wurde.Gemäß der ECMAScript -Spezifikation ist dieses Verhalten tatsächlich Teil der Erstellung der sogenannten "lexikalischen Umgebung" in der Erstellungsstufe von JavaScript. Aber lassen Sie uns nicht zu technisch sein, denken Sie daran, dass JavaScript es "scannen", bevor wir den Code ausführen.
Verbesserung
var
<code class="language-javascript">console.log(x); // 输出:undefined var x = 5; console.log(x); // 输出:5</code>-Anweisung an die Spitze des Geltungsbereichs gefördert, aber die Initialisierung
wurde nicht verbessert. Aus diesem Grund ist der erste Ausgabe var x
, anstatt einen Fehler zu werfen. Variablen existieren, aber es wurde nicht zugewiesen. x = 5
console.log(x)
und undefined
Die vorübergehende tote Fläche (TDZ) x
let
-Anweisung verbessert, sich jedoch vor der Initialisierung in einem vorübergehenden toten Bereich (TDZ) befand. Versuchen Sie, auf const
zuzugreifen, bevor die Initialisierung zu <code class="language-javascript">console.log(y); // 抛出ReferenceError: Cannot access 'y' before initialization let y = 10; console.log(y); // 输出:10</code>wird unter ähnlichen Umständen nur
zurückgeben. let y
y
ReferenceError
Dies enthält auch Inhalte, die oder var
Deklaration verwenden, natürlich auch Funktionen. var
undefined
zurückgibt, werden diese modernen Aussagen missverstanden. Die ECMAScript -Spezifikation bezieht sich auf dieses Verhalten als "vorübergehende Semantik der toten Region", aber ich nenne es "JavaScript macht uns ehrlich".Apropos vorübergehende tote Gebiete, hier deklarieren
vor dem ersten Zugrifflet
undconst
vor der Initialisierung. Anders als , wenn
let
const
Was hat hier passiert? Die Funktionserklärung wurde verbessert, sodass wir sie im Voraus aufrufen können. Aber was ist mit ? Es bleibt immer noch an seiner Stelle. Aus diesem Grund gibt uns Besuch var
undefined
und wir versuchen, es zu lesen, bevor das Skript fertig ist.
<code class="language-javascript">function setupEventHandler() { handleClick(); // 可运行! const config = { debug: true, }; function handleClick() { if (config?.debug) { // 未定义! console.log("Debug mode"); } } } setupEventHandler();</code>Der Weg zur Verbesserung der Klasse ist nicht dasselbe.
handleClick
config
Obwohl die Klasse verbessert ist, befinden sie sich noch in der "vorübergehenden toten Zone", bevor ihre Definitionen bewertet werden. Dies bedeutet, dass Sie nicht auf sie zugreifen können, bevor Sie sie deklarieren. handleClick
config
undefined
Denken Sie daran, die Aussage wurde nach oben verschoben, die Initialisierung blieb jedoch unverändert.
Das obige ist der detaillierte Inhalt vonJavaScript heben - Was bewegt sich und was bleibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!