在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 使用setTimeout,為什么下面這樣寫,都是大概每隔1s打印一個(gè)結(jié)果呢?

使用setTimeout,為什么下面這樣寫,都是大概每隔1s打印一個(gè)結(jié)果呢?

代碼如下:

for (let i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

打印結(jié)果:

clipboard.png

提問:為什么這里動(dòng)態(tài)設(shè)置setTimeout的延遲時(shí)間,效果確實(shí)大概1s打印出一個(gè)結(jié)果?如果想實(shí)現(xiàn)每隔0s,1s,2s,3s,4s打印一個(gè)結(jié)果,該如何修改代碼呢?

回答
編輯回答
法克魷

for(let i = 0; i < 5; i++){

setTimeout(function(){
    console.log(i)
},i*(i+1)/2*1000)

}

2017年10月27日 06:13
編輯回答
醉淸風(fēng)

在循環(huán)中,每一次循環(huán)決定在i*1000毫秒后執(zhí)行一次打印。
那么要修改其次很簡單,首先聲明一個(gè)根據(jù)你的目的計(jì)算延遲的函數(shù)

function getDelay(i) {
  var result = 0
  while (i > 0) {
    result += i;
    i--;
  }
  return result;
}

然后將原有代碼

i * 1000

這個(gè)地方改為

getDelay(i) * 1000
2017年11月19日 19:27
編輯回答
單眼皮

答案來了

function sum(i){if(i){return sum(i-1) + i}else return 0}
for (let i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, sum(i) * 1000);
}

圖片描述

2018年6月23日 00:23
編輯回答
哚蕾咪

這個(gè)應(yīng)該是js閉包,建議了解一下相關(guān)知識,答案也就有了

2017年5月21日 22:57
編輯回答
久不遇

這個(gè)問題,我是這樣理解的,首先,js解釋器已經(jīng)把代碼讀完了,setTimeout是異步的,所以他們是同時(shí)開始計(jì)時(shí),也就是一秒一個(gè),而是同步的,先等一秒,再等2秒,3秒。
如果要實(shí)現(xiàn)你想要的效果,需要單獨(dú)做個(gè)變量,或者把現(xiàn)在的異步改成同步。

2018年1月24日 19:49
編輯回答
短嘆
for (let i = 0, t = 0; i < 5; i++, t+=i*1000) {
    setTimeout(function() {
        console.log(i);
    }, t);
}
2018年7月24日 20:34