包裝在setTimeout 中的For 循環列印意外的值
在此腳本中,for 循環使用變數i 從1 到2 進行迭代,並在循環內設定一個超時函數,延遲100毫秒來提醒i的值當它執行時。然而,預期的行為是腳本連續列印 1 和 2,但 3 卻被警告兩次。
意外的行為源自於 i 在整個循環中共享並被修改為循環的事實取得進展。當超時函數執行時,i 已經達到 3,導致兩個警報都顯示該值。
要解決此問題並確保連續列印值,有必要為每個超時函數建立單獨的 i 副本。這可以透過定義一個專用函數 doSetTimeout 來實現,該函數將 i 作為參數並使用該特定值設定逾時。
使用doSetTimeout 修改後的腳本如下:
function doSetTimeout(i) { setTimeout(function() { alert(i); }, 100); } for (var i = 1; i <= 2; ++i) doSetTimeout(i);
透過此修改,循環的每次迭代都會建立i 的新副本,並將其傳遞給doSetTimeout,確保每次逾時都以正確的值執行。
以上是為什麼帶有 setTimeout 的 For 循環列印意外的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!