💻 JS For循环中嵌套`setTimeout()`方法的理解 🤔

来源:

在JavaScript开发中,我们经常需要处理一些定时任务或异步操作。当使用`for`循环与`setTimeout()`结合时,你会发现结果可能和预期不同!🤔

例如:

```javascript

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

setTimeout(() => {

console.log(i);

}, 1000);

}

```

输出结果会是 `3, 3, 3`,而不是 `0, 1, 2`。这是因为`setTimeout()`是异步的,循环会在`setTimeout`执行前完成,导致最终打印时变量`i`的值已经是循环结束后的值(即`3`)。⏰

那么如何解决呢?可以使用立即执行函数表达式(IIFE)包裹变量,为每次循环创建独立的作用域:

```javascript

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

(function(j) {

setTimeout(() => {

console.log(j);

}, 1000);

})(i);

}

```

这样就能得到正确的输出 `0, 1, 2`!💡

掌握这个技巧后,你就可以更灵活地处理复杂的异步逻辑了!🚀

标签:

免责声明:本文由用户上传,如有侵权请联系删除!