Javascript 浏览器控制台输出在for循环中有一个神秘的数字settimeout?
在控制台上运行此命令会立即显示一些详细信息,后面是实际的控制台日志。这些细节在不同的浏览器中意味着什么Javascript 浏览器控制台输出在for循环中有一个神秘的数字settimeout?,javascript,asynchronous,settimeout,Javascript,Asynchronous,Settimeout,在控制台上运行此命令会立即显示一些详细信息,后面是实际的控制台日志。这些细节在不同的浏览器中意味着什么 for(变量i=0;i
for(变量i=0;i<10;i++){
setTimeout(函数(){
控制台日志(i);
}, 0);
}
您的setTimeout()
调用创建的函数都引用了在for
循环中定义的完全相同的变量i
。循环完成后,i
的值将为10
,因此当计时器处理程序启动时,将记录该值。您正在调度调用堆栈末尾的10个console.log
语句(当for循环完成后函数返回时)。由于此时i
是10
,因此它打印10
的次数与您使用该处理程序调用setTimeout
的次数相同
编辑
问题澄清后,你看到的是。在本例中,它是您上次设置的超时值
window.setTimeout
返回一个可取消且对选项卡会话唯一的ID。在这种情况下,浏览器似乎正在增加他们已经存储的计数,因此您得到的增量为10,因为您在循环中调用了setTimeout
10次。我不确定您在说什么,也许你可以附加一个屏幕截图?像<290=$1
这样的东西是什么意思???那么函数范围的变量,当你的setTimeout中的函数被计算时,我已经是10了(因为javascript是单线程的,你的回调函数只有在浏览器有时间执行回调之后才会发生)。您应该将i绑定到您的函数,或者创建一个新函数,明确设置单个值的超时,这样我就不会调用10
“怪异”。这是一个相当正常的数字。@AnotherDev这当然是我的问题,但发布的代码中没有任何内容可以打印出来。是的,我得出了这个结论。但我退出了浏览器并运行了代码。Chrome从14岁开始增加到24,34,44岁。FF从27开始增加到37,47。休息2分钟后,FF显示为296,并增加到306。在safari,从74开始,增加到84,94104…?是的,我得出了这个结论。但我退出了浏览器并运行了代码。Chrome从14岁开始增加到24,34,44岁。FF从27开始增加到37,47。休息2分钟后,FF显示为296,并增加到306。在safari中,从74开始,增加到84,94104。。。?