为什么在 运行 带有 setTimeout 的 for 循环时我在控制台中得到一个未知值?

Why am i getting a unknown value in console while running a for loop with setTimeout?

运行控制台中的以下代码:

for (var i = 0; i < 5; i++) {
    let j = i;
    setTimeout(function(){
        console.log(j);
    }, 0)
}

导致一些奇怪的行为。当我 运行 它一次时,我看到类似的东西:

顶部的数字是多少?

9 // what is this????
0
1
2
3
4

下次我运行,不一样了:

13 // what is this????
0
1
2
3
4

控制台将记录计算的最终表达式的结果。这就是为什么,例如,输入

'foo' + 'bar'

导致 'foobar' 被记录。

此处,最终(同步)计算的表达式是 setTimeoutsetTimeout returns 一个整数,表示超时的 ID(可与 clearTimeout 稍后)。 setInterval 以同样的方式工作。所以您看到的数字就是超时 ID。 (听起来 setTimeout 之前在该页面加载时被调用了 12 次)