6 回答
TA贡献1796条经验 获得超7个赞
答案来了
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);
}

TA贡献2019条经验 获得超9个赞
在循环中,每一次循环决定在i*1000毫秒后执行一次打印。
那么要修改其次很简单,首先声明一个根据你的目的计算延迟的函数
function getDelay(i) {
var result = 0
while (i > 0) {
result += i;
i--;
}
return result;
}
然后将原有代码
i * 1000
这个地方改为
getDelay(i) * 1000
TA贡献1802条经验 获得超10个赞
for (let i = 0, t = 0; i < 5; i++, t+=i*1000) {
setTimeout(function() {
console.log(i);
}, t);
}
TA贡献1843条经验 获得超7个赞
for(let i = 0; i < 5; i++){
setTimeout(function(){
console.log(i)
},i*(i+1)/2*1000)
}
TA贡献1868条经验 获得超4个赞
这个问题,我是这样理解的,首先,js解释器已经把代码读完了,setTimeout是异步的,所以他们是同时开始计时,也就是一秒一个,而是同步的,先等一秒,再等2秒,3秒。
如果要实现你想要的效果,需要单独做个变量,或者把现在的异步改成同步。
添加回答
举报
