Funktionsdeklarationen in bedingten Anweisungen: Eine Fallstudie
Diese Frage dreht sich um das Verhalten von Funktionsdeklarationen, wenn sie in if/else-Anweisungen verschachtelt sind. Traditionell wurden Funktionsdeklarationen in JavaScript angehoben und hatten einen globalen Geltungsbereich, unabhängig von ihrer physischen Position im Code. Im strikten ES5-Modus waren Funktionsdeklarationen auf den Bereich der obersten Ebene oder innerhalb von Funktionen beschränkt. Der nicht strikte Modus zeigte unvorhersehbares Verhalten, was zu Inkonsistenzen zwischen Browsern führte.
Im bereitgestellten Beispiel:
<code class="js">var abc = ''; if (1 === 0) { function a() { abc = 7; } } else if ('a' === 'a') { function a() { abc = 19; } } else if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); document.write(abc); //writes "foo" even though 'foo' !== 'bar'</code>
In modernem JavaScript (ES2015 und höher) sind Funktionsdeklarationen jetzt innerhalb von Blöcken zulässig . Sie sind jedoch auf den Block beschränkt, in dem sie deklariert sind. Das bedeutet, dass im obigen Beispiel:
An Um Funktionen bedingt zu definieren, wird empfohlen, Funktionsausdrücke anstelle von Funktionsdeklarationen zu verwenden. Dadurch wird sichergestellt, dass der Umfang der Funktion explizit definiert und vorhersehbar ist.
Das obige ist der detaillierte Inhalt vonKönnen Funktionsdeklarationen in bedingten Anweisungen zu unerwartetem Verhalten in JavaScript führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!