Heim > Web-Frontend > js-Tutorial > Können Funktionsdeklarationen in bedingten Anweisungen zu unerwartetem Verhalten in JavaScript führen?

Können Funktionsdeklarationen in bedingten Anweisungen zu unerwartetem Verhalten in JavaScript führen?

Barbara Streisand
Freigeben: 2024-11-02 21:26:30
Original
531 Leute haben es durchsucht

Can Function Declarations Within Conditional Statements Lead to Unexpected Behavior in JavaScript?

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>
Nach dem Login kopieren

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:

  • Wenn es in einer strengen ES5-Umgebung ausgeführt wird, generiert der Code einen Fehler, da Funktionen nicht innerhalb von Blöcken deklariert werden können.
  • Wenn es ausgeführt wird In einer nicht strengen ES5-Umgebung können verschiedene Browser unterschiedliche Verhaltensweisen aufweisen.
  • In einer ES2015-Umgebung wird die Funktion a im Rahmen jeder if-Anweisung deklariert. Wenn a() aufgerufen wird, greift es daher auf die im globalen Bereich deklarierte abc-Variable zu und weist ihr den Wert „foo“ zu (den Wert, der in der letzten else if-Anweisung zugewiesen wird).

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage