Heim >Web-Frontend >js-Tutorial >Wie verhalten sich ES6-Funktionen auf Blockebene im strengen und nicht strengen Modus, mit und ohne Weberweiterungen?
Die ES6-Spezifikation führt Funktionen auf Blockebene ein und ermöglicht Funktionsdeklarationen innerhalb von Blöcken. Das Verständnis ihrer Semantik ist für eine effektive Programmierung von entscheidender Bedeutung.
Setting | Visible Outside Block | Hoisted | Hoisting Scope | Temporal Dead Zone |
---|---|---|---|---|
Non-strict, No Web Extensions | No | No | N/A | N/A |
Strict, No Web Extensions | No | Yes | Block Level | Yes |
Non-strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
Strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
"Strenger Modus" bezieht sich in diesem Zusammenhang hängt von der Strenge der Funktion oder des Skripts ab, in der der Block mit der Funktionsdeklaration erscheint, nicht von der Funktion selbst. „Web-Erweiterungen“ gelten nur für schlampigen (nicht strengen) Code mit „vernünftigem“ Funktionsauftritt (keine Namenskollisionen).
In reinem ES6 (ohne „Web-Erweiterungen“) haben Funktionsdeklarationen in Blöcken eine konsistente Semantik unabhängig von der Strenge. Sie werden an die Spitze des Blocks gehoben und verhalten sich wie normale Funktionsdeklarationen.
Mit „Weberweiterungen“ führt der Sloppy-Modus zusätzliche Semantik ein. Eine Funktionsdeklaration innerhalb eines Blocks wird als var-Deklaration an die Spitze der umschließenden Funktion gehoben und das Funktionsobjekt wird dieser Variablen zugewiesen, wenn die Funktionsdeklaration ausgewertet wird.
Dies führt zu zwei Bindungen für dasselbe Bezeichner: ein funktionsbezogener (außerhalb des Blocks sichtbarer) und ein blockbezogener (nur innerhalb des Blocks sichtbarer) Bezeichner. Die funktionsbezogene Bindung wird mit undefiniert initialisiert, bis die Funktion deklariert wird. Zu diesem Zeitpunkt wird ihr das Funktionsobjekt zugewiesen.
Bevor die Funktionsdeklaration in der Blockausführung angetroffen wird, ist die funktionsbezogene Bindung undefiniert und greift zu es wird eine Ausnahme ausgelöst.
Das obige ist der detaillierte Inhalt vonWie verhalten sich ES6-Funktionen auf Blockebene im strengen und nicht strengen Modus, mit und ohne Weberweiterungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!