関数宣言: 厳密環境と非厳密環境の比較
if/else ステートメント内の関数宣言の処理は時間の経過とともに進化してきました。
ES5 Strict モード
Strict モードでは、ブロック内の関数宣言は許可されません。質問に示されているように、if ステートメント内で関数を宣言しようとすると、構文エラーが発生します。
ES5 Non-Strict Mode
In non-Strict Mode厳密モードでは、ブロック内の関数宣言の動作に一貫性がありませんでした。ブラウザやエンジンが異なれば、それぞれ独自の解釈があります。 Chrome などの一部のブラウザでは、意図されたスコープ外で関数を宣言して使用することができましたが、Firefox などのブラウザでは、関数がブロック スコープで扱われ、ブロック外では使用できませんでした。
ES2015 ブロック-スコープ付き関数
ECMAScript 2015 (ES2015) の導入以降、ブロック内の関数宣言は明示的にブロック スコープになりました。これは、if ステートメントで宣言された関数は if ブロック内でのみアクセスできることを意味します。
この例では、関数 a は if ブロック内でのみ宣言されているため、コードでは未定義関数エラーが発生します。
推奨事項
関数を条件付きで定義するには、関数宣言ではなく関数式を使用することをお勧めします。関数式はデフォルトでブロックスコープであり、意図しない副作用を引き起こすことなく、必要に応じて if ステートメント内で定義できます。
以上が厳密な環境と非厳密な環境では、関数宣言の動作はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。