ホームページ > 記事 > ウェブフロントエンド > JavaScript では、If/Else ステートメント内の関数宣言の動作はどのように変わりましたか?
JavaScript では、従来、関数宣言は if/else ステートメント内で別の方法で処理されていました。 ES5 より前の時代では、if ブロック内で宣言された関数は、ブロックの条件に関係なく、ブロックの外でアクセスできました。
<code class="js">var abc = ''; if (1 === 0) { function a() {...} } else if ('a' === 'a') { function a() {...} } a(); // Accesses the function declared inside one of the if blocks</code>
この動作はブラウザーによって異なり、予期しない結果につながる可能性がありました。この矛盾を解決するために、ES5 の厳密モードでは、関数宣言はスクリプトまたはモジュールの最上位になければならないというルールが導入されました。これらをブロック内に配置すると、構文エラーが発生します。
しかし、ES2015 の登場により、状況は変わりました。最新の JavaScript 環境では、ブロック内の関数宣言が有効になり、そのブロック内でスコープが設定されるようになりました。たとえば、次のコードでは:
<code class="js">var abc = ''; if (1 === 0) { function a() {...} } else if ('a' === 'a') { function a() {...} } a(); // Undefined function error</code>
関数 a は if ステートメントのスコープ内で宣言されているため、その外部からはアクセスできません。
したがって、必要な場合は、条件付きで関数を定義する場合は、宣言の代わりに関数式を使用することをお勧めします。関数式はコード内のどこにでも定義でき、現在のスコープ内の変数の値をキャプチャできます。
<code class="js">var abc = ''; if (1 === 0) { var a = function () {...}; } else if ('a' === 'a') { var a = function () {...}; } a();</code>
以上がJavaScript では、If/Else ステートメント内の関数宣言の動作はどのように変わりましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。