Javascript 为什么在使用setTimeout运行for循环时,控制台中会出现未知值?

Javascript 为什么在使用setTimeout运行for循环时,控制台中会出现未知值?,javascript,closures,settimeout,Javascript,Closures,Settimeout,在控制台中运行以下代码: for(变量i=0;i

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

for(变量i=0;i<5;i++){
设j=i;
setTimeout(函数(){
控制台日志(j);
}, 0)

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

'foo' + 'bar'
结果将记录
'foobar'


在这里,(同步)计算的最终表达式是
setTimeout
,并且
setTimeout
返回一个整数,指示超时的ID(稍后可与
cleartimout
一起使用)<代码>设置间隔的工作方式相同。因此,您看到的数字是超时ID(听起来像
setTimeout
以前在加载页面时被调用了12次)

这是
setTimeout()的返回值。
。在浏览器中,句柄是一个正整数,如果要取消回调,则可以在计划执行回调之前将其传递给
clearTimeout()
。它的返回值
setTimeout
函数将被存储,并在需要
clearTimeout
的情况下使用。谢谢,我首先认为它返回了一些堆栈大小。规范的相关部分(wrt duplicate):它不是“仅仅”最终表达式(如果是这样,
var foo=1
将记录
1
),它是
for
循环的“结果”。