Heim  >  Artikel  >  Web-Frontend  >  Können Sie Funktionen in bedingten Anweisungen in JavaScript deklarieren?

Können Sie Funktionen in bedingten Anweisungen in JavaScript deklarieren?

DDD
DDDOriginal
2024-11-01 15:10:02582Durchsuche

Can You Declare Functions Inside Conditional Statements in JavaScript?

Funktionsdeklarationen in bedingten Anweisungen

In JavaScript verhalten sich Funktionsdeklarationen je nach vorherrschendem Sprachstandard und der Umgebung, in der sie ausgeführt werden, unterschiedlich.

Im strikten Modus (ES5)

Im strikten Modus, der in ECMAScript 5 (ES5) eingeführt wurde, sind Funktionsdeklarationen in bedingten Anweisungen nicht zulässig. Dies liegt daran, dass Funktionsdeklarationen hochgehobene Variablen erstellen, die sich auf die gesamte Funktion oder den globalen Bereich beziehen. Die Platzierung innerhalb einer bedingten Anweisung würde diesen Hebemechanismus zerstören.

Nicht-strikter Modus (ES5)

Im nicht-strikten Modus jedoch das Verhalten von Funktionsdeklarationen innerhalb bedingter Anweisungen war unvorhersehbar. Verschiedene Browser und JavaScript-Engines implementierten ihre eigenen Regeln für den Umgang mit dieser Situation, was zu inkonsistenten Ergebnissen führte.

In Modern JavaScript (ES2015)

Ab 2018 die meisten modernen Browser unterstützt ECMAScript 2015 (ES2015), das eine strengere Interpretation von Funktionsdeklarationen innerhalb von Blöcken einführte. In ES2015 sind Funktionsdeklarationen auf den Block beschränkt, in dem sie deklariert werden.

Beispiel:

Bedenken Sie den folgenden Code:

<code class="javascript">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>

Im strikten Modus oder in ES2015 würde dieser Code zu einem Fehler führen, da die Funktion a nicht im globalen Bereich definiert ist. Im nicht strikten Modus kann es jedoch je nach Implementierung zu unterschiedlichen Ausgaben kommen. Im bereitgestellten Beispiel gibt Chrome „foo“ aus, während Firefox „19“ ausgibt.

Empfehlung:

Um unerwartetes Verhalten zu vermeiden, wird empfohlen, stattdessen Funktionsausdrücke zu verwenden von Funktionsdeklarationen bei der bedingten Definition von Funktionen. Funktionsausdrücke erstellen bereichsbezogene Funktionen, auf die nur innerhalb ihres unmittelbaren Bereichs zugegriffen werden kann.

Das obige ist der detaillierte Inhalt vonKönnen Sie Funktionen in bedingten Anweisungen in JavaScript deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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