Der Verbesserungsmechanismus von
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
console.log(x); // 输出:undefined var x = 5; console.log(x); // 输出:5
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 console.log(y); // 抛出ReferenceError: Cannot access 'y' before initialization let y = 10; console.log(y); // 输出:10
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.
function setupEventHandler() { handleClick(); // 可运行! const config = { debug: true, }; function handleClick() { if (config?.debug) { // 未定义! console.log("Debug mode"); } } } setupEventHandler();
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!