在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`!💡
掌握这个技巧后,你就可以更灵活地处理复杂的异步逻辑了!🚀
标签:
免责声明:本文由用户上传,如有侵权请联系删除!