javascript - 与javascript中的for循环输出混淆

标签 javascript for-loop

<分区>

我正在阅读你不知道的 JS 丛书。

在这本书的第 5 章作用域和闭包中,有一个我无法理解的 for 循环

for (var i=1; i<=5; i++) {
setTimeout( function timer(){
    console.log( i );
}, i*1000 );}

它在 1 秒间隔后在控制台中打印 6 5 次。 甚至作者都试图解释为什么会这样,但我无法理解他想说的话。

您可以在此处找到此代码及其说明: https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch5.md

前往页面上的“Loop + Closure”部分,您会找到这段代码。

谁能用简单的语言向我解释一下?? 为什么它在 1 秒间隔后在控制台中打印 6 5 次而不是 1、2、...、5。

提前感谢您的时间和精力。

最佳答案

是的,因为循环在第二个内运行,那时 i 的值为 6(最后一个 i++ 没有进入循环)。因此它使用 该值渲染 5 次。

您可以使用以下打印 1,2,3,4,5

for (let  i=1; i<=5; i++) {
setTimeout( function timer(){
    console.log( i );
}, i*1000 );}

使用 let 定义 i 的范围,它是 ES6

的一部分

关于javascript - 与javascript中的for循环输出混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41716806/

相关文章:

c++ - 尝试创建一个 for 循环以显示从 1 (#) 到 8 (#) 的井号

matlab - 在 MATLAB 中向量化 for 循环

python - 使用 REGEX 分割字符串

javascript - 我如何将这个 for 循环变成 forEach 循环?

javascript - 如何从 for 循环中随机选择颜色和形状并将其显示在另一个 div 中?

javascript - 在 browser.runtime.getBackgroundPage() 中访问变量

javascript - HTTP 请求移动 JavaScript

javascript - "Uncaught TypeError: Cannot read property ' 在 angularJS/NodeJS 中使用 strip 支付方法 Stripe.charges.create({}) 时创建 ' of undefined"

javascript - 如何在 JavaScript 中为事件处理程序进行早期绑定(bind)? (以 jQuery 为例)

javascript - 以下 gulp 任务不适用于 Windows,但适用于 ubuntu