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

Browser console output has a mysterious number in for loop with settimeout?

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

    for (var i = 0; i < 10; i++) {
        setTimeout(function() {
            console.log(i);
        }, 0);
    }

您的 setTimeout() 调用创建的函数都引用完全相同的变量,即 ifor 循环中定义的变量。当循环结束时,i 的值将是 10,这就是定时器处理程序触发时记录的内容。

您在调用堆栈的末尾安排了 10 个 console.log 语句(当 for 循环完成后的函数 returns 时)。由于此时 i10,它打印 10 的次数与您使用该处理程序调用 setTimeout 的次数一样多。

编辑

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