浏览器控制台输出在for循环中有一个神秘的数字与settimeout?

时间:2015-10-07 22:07:00

标签: javascript asynchronous settimeout

在控制台上运行此命令会立即显示一些详细信息,然后显示实际的控制台日志。这些细节在不同的浏览器中意味着什么?

document.getElementsByClassName(itemId)

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

您在调用堆栈的末尾调度了10个console.log语句(在for循环完成后函数返回时)。由于此时i10,因此打印10的次数与您使用该处理程序调用{​​{1}}的次数相同。

修改

在澄清问题后,您所看到的是value of the last expression evaluated。在这种情况下,它是您设置的最后一次超时的值。 setTimeout返回一个可取消且对于标签会话唯一的ID。在这种情况下,似乎浏览器正在递增他们已经存储的计数,所以你得到的增量为10,因为你在循环中调用了window.setTimeout 10次。

答案 1 :(得分:0)

您的setTimeout()调用会创建所有引用完全相同变量的函数,i循环中定义for。循环结束后,i的值将为10,以便在计时器处理程序触发时记录了什么。