問題:
為什麼下面的 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程式碼經歷兩個處理階段:
執行: 執行函數表達式和其他程式碼。
函數宣告。
函數宣告在編譯階段進行處理,因此它們在呼叫 setTimeout 函數之前就存在。以上是為什麼在宣告變數之前使用指派給變數的函數表達式執行「setTimeout」失敗,但使用函數宣告執行則成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!