ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の if/else ステートメント内で関数宣言はどのように動作しますか?

JavaScript の if/else ステートメント内で関数宣言はどのように動作しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 01:58:03427ブラウズ

How Do Function Declarations Behave Within if/else Statements in JavaScript?

if/else ステートメント内の関数宣言

if/else ステートメント内で関数宣言が見つかった場合、その処理は JavaScript によって異なる場合があります。環境。提供されたコード スニペットでは、各 if/else 分岐内で関数宣言が定義されています。

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); // Expected output: foo

ECMAScript 5 (ES5) の非厳密モードでは、上記のコードは予測できない動作を示します。ブラウザやエンジンが異なれば、ブロック内の関数宣言の処理方法も異なります。

ただし、ECMAScript 2015 (ES2015) 以降では、ブロック内での関数宣言が許可されます。このようなブロック内の関数宣言は、そのブロックにスコープされます。コード スニペットでは、関数 a は最も内側の if ブロック内で宣言されています。その結果、グローバル スコープでは未定義となり、未定義関数エラーが発生します:

if ('foo' === 'bar') {
  function a() {
    abc = 'foo';
  }
}
a(); // Error: a is not defined

条件付き関数定義の場合は、宣言の代わりに関数式を使用することをお勧めします:

var a = 'foo' === 'bar' ? function() {
  abc = 'foo';
} : function() {
  abc = 19;
};
a();
document.write(abc); // Expected output: 19

以上がJavaScript の if/else ステートメント内で関数宣言はどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。