为什么在 运行 带有 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'
被记录。
此处,最终(同步)计算的表达式是 setTimeout
,setTimeout
returns 一个整数,表示超时的 ID(可与 clearTimeout
稍后)。 setInterval
以同样的方式工作。所以您看到的数字就是超时 ID。 (听起来 setTimeout
之前在该页面加载时被调用了 12 次)
运行控制台中的以下代码:
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'
被记录。
此处,最终(同步)计算的表达式是 setTimeout
,setTimeout
returns 一个整数,表示超时的 ID(可与 clearTimeout
稍后)。 setInterval
以同样的方式工作。所以您看到的数字就是超时 ID。 (听起来 setTimeout
之前在该页面加载时被调用了 12 次)