首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这段Javascript代码在执行时会打印6次?

为什么这段Javascript代码在执行时会打印6次?
EN

Stack Overflow用户
提问于 2017-12-09 21:42:32
回答 1查看 32关注 0票数 0

这是一段代码,它在一秒钟内执行6到5次。有没有人能给我详细解释一下?

代码语言:javascript
复制
for (var i=1; i<=5; i++) {
    setTimeout( function timer(){
        console.log( i );
        }, i*1000 );
}
EN

回答 1

Stack Overflow用户

发布于 2017-12-09 21:46:09

变量itimer函数闭包的一部分。当执行timer函数时,它将打印当时i的值。当发生这种情况时,循环已经完成,因此i的值为6。对于timer的所有5次执行,您将看到6打印了5次。你还能期待什么呢?

如果您想打印1,2,...,5之间的计数值,然后使用立即求值的函数表达式将i的当前具体值传递到闭包中:

代码语言:javascript
复制
for (var i = 1; i <= 5; i++) {
  setTimeout(function (value) {
    return function timer() {
      console.log(value);
    }
  }(i), i*1000);
}

另一种等价的变体:

代码语言:javascript
复制
for (var i = 1; i <= 5; i++) {
  (function () {
    var value = i;
    setTimeout(function timer() {
      console.log(value);
    }, i*1000);
  })()
}

请注意,在这两个示例中,变量value都是在内部函数的闭包中定义的,并且在for循环的每次迭代中都会创建一个不同的value实例,迭代时的值为i。这是与问题中的代码的关键区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47729160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档