在JavaScript中,for
循环中的setTimeout
函数不会按预期打印连续值,因为setTimeout
是异步的,它会在指定的时间后执行,但不会等待前一个setTimeout
完成。这会导致所有的setTimeout
函数同时执行,并且在循环结束后才会打印值。
为了解决这个问题,可以使用setTimeout
的嵌套方式来实现连续打印值,或者使用async/await
和Promise
来实现。
以下是使用setTimeout
嵌套的方式:
function printValues(i, n) {
if (i > n) {
return;
}
setTimeout(function() {
console.log(i);
printValues(i + 1, n);
}, 1000);
}
printValues(1, 5);
以下是使用async/await
和Promise
的方式:
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function printValues(n) {
for (let i = 1; i <= n; i++) {
await delay(1000);
console.log(i);
}
}
printValues(5);
这两种方式都可以实现在for
循环中使用setTimeout
按预期打印连续值。
领取专属 10元无门槛券
手把手带您无忧上云