Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器控制台输出在for循环中有一个神秘的数字settimeout?_Javascript_Asynchronous_Settimeout - Fatal编程技术网

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。。。?