リターン後の変数の巻き上げがブラウザで異なる動作をする理由
変数宣言をスコープの先頭に移動する JavaScript の巻き上げメカニズムと相互作用異なるブラウザで return ステートメントを使用すると、予期せずエラーが発生します。次のコードを考えてみましょう。
<code class="javascript">alert(myVar1); return false; var myVar1;</code>
このコードは、Internet Explorer、Firefox、および Opera でエラーとなり、関数の外にある無効な return ステートメントを示します。ただし、Safari と Chrome では、コードはエラーなしで実行され、myVar1 に「未定義」が表示されます。
動作の説明
JavaScript ホイスティングにより、変数が変数の先頭に移動します。コード内での配置に関係なく、スコープに適用されます。上記の例では、インタープリターは myVar1 をグローバル スコープの先頭にホイストします。
<code class="javascript">var myVar1; alert(myVar1); return false;</code>
その後、return ステートメントは false を返そうとしますが、関数の外にあるため失敗します。 IE、FF、Opera では、これはエラーになります。
Safari と Chrome の動作
Safari と Chrome では、巻き上げステートメントと return ステートメントの処理が異なります。同社の JIT (ジャストインタイム) コンパイラーは、実行前に静的分析を実行します。この場合、JIT は無効な return ステートメントを識別して無視し、コードの実行と myVar1 の「未定義」の表示を許可します。
ベスト プラクティス
回避するにはホイストに関連する潜在的なエラーを考慮して、他のコードの前にスコープの先頭で変数を宣言することがベスト プラクティスです。これにより、ホイスティングによって変数が予期せず移動したり、予期しない動作が発生したりすることがなくなります。
以上がreturn ステートメントを使用したホイスティングの動作がブラウザごとに異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。