You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript异步行为:setTimeout与IIEF执行机制解惑

JavaScript异步回调与for循环执行关系疑问

示例代码

var arr = [10, 24, 15, 4];
for (var i = 0; i < arr.length; i++) {
  setTimeout(
    (function (index) {
      return function () {
        console.log("index:" + index + " element: " + arr[index]);
      };
    })(i),
    1000
  );
}

执行输出

index:0 element: 10
index:1 element: 24
index:2 element: 15
index:3 element: 4

疑问点

我了解JavaScript中异步函数(如setTimeout调度的回调)仅在所有同步代码执行完毕后才运行,原以为for循环会先执行完成,且因var声明的i是函数作用域,回调执行时i应为数组长度4,但实际输出却能正确打印对应索引和元素,甚至将var改为let结果也一致。

想请教:

  • 这种情况的原因是什么?
  • JavaScript如何处理异步回调与同步for循环的执行关系?
  • 为何此处使用var或let无差异?
    希望能得到见解或学习资源。

内容的提问来源于stack exchange,提问作者Murshid Ameen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:45:14