問題:
次の JavaScript の例はなぜ実行に失敗しますか?
<code class="javascript">(function() { setTimeout(someFunction1, 10); var someFunction1 = function() { alert('here1'); }; })();</code>
他の同様の例は意図したとおりに動作しますが:
<code class="javascript">(function() { setTimeout(someFunction2, 10); function someFunction2() { alert('here2'); } })(); (function() { setTimeout(function() { someFunction3(); }, 10); var someFunction3 = function() { alert('here3'); }; })(); (function() { setTimeout(function() { someFunction4(); }, 10); function someFunction4() { alert('here4'); } })();</code>
解決策:
問題は関数宣言と関数間の評価順序にあります。関数式。
関数宣言と式
評価順序
JavaScript コードは、
例の分析
例 1:
これらの各例では、関数function キーワードを使用して宣言され、
JavaScript の関数引数は常に値によって渡されます。つまり、setTimeout 関数は変数 someFunction1 を直接参照するのではなく、変数が参照する関数のコピーを参照します。
以上が`setTimeout` は、変数が宣言される前に変数に割り当てられた関数式では実行に失敗するのに、関数宣言では成功するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。