ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptの条件文内で関数を宣言できますか?

JavaScriptの条件文内で関数を宣言できますか?

DDD
DDDオリジナル
2024-11-01 15:10:02502ブラウズ

Can You Declare Functions Inside Conditional Statements in JavaScript?

条件文内の関数宣言

JavaScript では、関数宣言は、一般的な言語標準と実行される環境に応じて異なる動作をします。

厳密モード (ES5)

ECMAScript 5 (ES5) で導入された厳密モードでは、条件ステートメント内での関数宣言は許可されません。これは、関数宣言によって、関数全体またはグローバル スコープにスコープされるホイスト変数が作成されるためです。これらを条件ステートメント内に配置すると、この巻き上げメカニズムが壊れます。

非厳密モード (ES5)

ただし、非厳密モードでは、関数宣言の動作が異なります。条件ステートメント内でのエラーは予測できませんでした。さまざまなブラウザーや JavaScript エンジンがこの状況に対処するための独自のルールを実装しており、一貫性のない結果が生じていました。

モダン JavaScript (ES2015) では

2018 年現在、ほとんどの最新ブラウザーはECMAScript 2015 (ES2015) をサポートします。これにより、ブロック内の関数宣言のより厳密な解釈が導入されました。 ES2015 では、関数宣言は、宣言されているブロックにスコープされます。

例:

次のコードを考えてみましょう:

<code class="javascript">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>

厳密モードまたは ES2015 では、関数 a がグローバル スコープで定義されていないため、このコードはエラーになります。ただし、非厳密モードでは、実装に応じて異なる出力が生成される可能性があります。この例では、Chrome は「foo」を出力し、Firefox は「19」を出力します。

推奨事項:

予期しない動作を避けるために、代わりに関数式を使用することをお勧めします。関数を条件付きで定義する場合の関数宣言の説明。関数式は、直接のスコープ内でのみアクセスできるスコープ付き関数を作成します。

以上がJavaScriptの条件文内で関数を宣言できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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