条件付きステートメント内の関数宣言: ケーススタディ
この質問は、if/else ステートメント内にネストされている場合の関数宣言の動作を中心に展開します。従来、JavaScript では、コード内の物理的な位置に関係なく、関数宣言はホイストされ、グローバル スコープを持っていました。 ES5 厳密モードでは、関数宣言はトップレベルのスコープまたは関数内に制限されていました。非厳密モードでは予期しない動作が発生し、ブラウザ間で不一致が発生しました。
以下の例:
<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>
最新の JavaScript (ES2015 以降) では、ブロック内での関数宣言が許可されるようになりました。 。ただし、それらのスコープは、宣言されているブロックに限定されます。これは、上記の例では次のことを意味します。
To条件付きで関数を定義する場合は、関数宣言の代わりに関数式を使用することをお勧めします。これにより、関数のスコープが明示的に定義され、予測可能であることが保証されます。
以上が条件文内の関数宣言は JavaScript で予期しない動作を引き起こす可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。