首页 > 解决方案 > 对 JavaScript 的 var 作用域感到困惑

问题描述

我对以下代码的输出感到困惑:

for (var i = 0; i < 5; i++) { 

    setTimeout(function() { 
        console.log(i); 
    }, i * 1000 );

}

输出为 5 5 5 5 5,每个 5 之间有 1 秒的延迟。

我知道 var 是函数作用域,但 setTimeout 中的函数也在 for 循环中。为什么输出不是 0 1 2 3 4,0 和 1 之间有 1 秒延迟,1 和 2 之间有 2 秒延迟,2 和 3 之间有 3 秒延迟,之间有 4 秒延迟3和4?

标签: javascript

解决方案


推荐阅读