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
循环的“结果”。