首頁 > web前端 > js教程 > 為什麼帶有 setTimeout 的 For 循環列印意外的值?

為什麼帶有 setTimeout 的 For 循環列印意外的值?

Patricia Arquette
發布: 2024-12-29 07:46:15
原創
942 人瀏覽過

Why Does a For-Loop with setTimeout Print Unexpected Values?

包裝在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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板