代码如下:
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
打印结果:
提问:为什么这里动态设置setTimeout的延迟时间,效果确实大概1s打印出一个结果?如果想实现每隔0s,1s,2s,3s,4s打印一个结果,该如何修改代码呢?
代码如下:
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
打印结果:
提问:为什么这里动态设置setTimeout的延迟时间,效果确实大概1s打印出一个结果?如果想实现每隔0s,1s,2s,3s,4s打印一个结果,该如何修改代码呢?
在循环中,每一次循环决定在i*1000毫秒后执行一次打印。
那么要修改其次很简单,首先声明一个根据你的目的计算延迟的函数
function getDelay(i) {
var result = 0
while (i > 0) {
result += i;
i--;
}
return result;
}
然后将原有代码
i * 1000
这个地方改为
getDelay(i) * 1000
for (let i = 0, t = 0; i < 5; i++, t+=i*1000) {
setTimeout(function() {
console.log(i);
}, t);
}
这个问题,我是这样理解的,首先,js解释器已经把代码读完了,setTimeout是异步的,所以他们是同时开始计时,也就是一秒一个,而是同步的,先等一秒,再等2秒,3秒。
如果要实现你想要的效果,需要单独做个变量,或者把现在的异步改成同步。
13 回答13.1k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
答案来了