„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können Sie Funktionen in bedingten Anweisungen in JavaScript deklarieren?

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

Veröffentlicht am 18.11.2024
Durchsuche:856

Can You Declare Functions Inside Conditional Statements in JavaScript?

Funktionsdeklarationen in bedingten Anweisungen

In JavaScript weisen Funktionsdeklarationen je nach vorherrschendem Sprachstandard und der Umgebung, in der sie ausgeführt werden, ein unterschiedliches Verhalten auf.

Im strikten Modus (ES5)

Im strikten Modus, eingeführt in ECMAScript 5 (ES5) Funktionsdeklarationen sind 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:

Betrachten Sie den folgenden Code:

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'

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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3