首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

setTimeout里面的for循环

setTimeout 中使用循环时,需要注意 JavaScript 的事件循环机制。setTimeout 是异步的,这意味着它不会阻塞其他代码的执行。在 setTimeout 中使用循环时,可能会导致意外的结果。

例如,以下代码将会在 1 秒后输出数字 5 到 1,而不是按照预期的顺序输出数字 1 到 5。

代码语言:javascript
复制
for (var i = 5; i > 0; i--) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

这是因为 setTimeout 中的回调函数会在循环结束后执行,此时 i 的值已经变为 0。为了解决这个问题,可以使用立即执行函数表达式(IIFE)来创建一个新的作用域,以便在每次循环时捕获当前的 i 值。

代码语言:javascript
复制
for (var i = 5; i > 0; i--) {
  (function(currentI) {
    setTimeout(function() {
      console.log(currentI);
    }, 1000);
  })(i);
}

这样,每次循环时都会创建一个新的作用域,并将当前的 i 值传递给 IIFE。因此,当 setTimeout 中的回调函数执行时,它将能够访问正确的 i 值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券