【问题标题】:global variable not working inside anonymous function全局变量在匿名函数中不起作用
【发布时间】:2013-03-21 20:55:46
【问题描述】:
var count = 0; 
for ( var i = 0; i < 4; i++ ) { 
  setTimeout(function(){ 
    assert( i == count++, "Check the value of i." ); 
  }, i * 200); 
}

为什么这不起作用(i 等于 4 而不是每次都等于计数)? count, var 是在全局范围内创建的,为什么它们在函数内不可用?

(我想解释一下为什么这不起作用,我找到了一种通过将其包装在另一个函数中来使其工作的方法,只是想了解)

【问题讨论】:

  • 按预期工作 -> FIDDLE,但 i 的值会发生变化,正如您所期望的那样。

标签: javascript function variables closures global


【解决方案1】:

使用这个; i 的值将在每个 setTime out 内为 4,因为 for 循环已经完成并且

的值

匿名函数将通过创建新上下文来保留其中的变量。

var count = 0; 
for ( var i = 0; i < 4; i++ ) { 
  (function(i){
     setTimeout(function(){ 
            assert( i == count++, "Check the value of i." ); 
      }, i * 200);
  })(i); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2016-03-01
    • 1970-01-01
    • 2021-02-14
    • 2023-01-08
    • 2017-12-25
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多