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 サイトの他の関連記事を参照してください。