全局变量在匿名函数内不起作用

时间:2013-03-21 20:55:46

标签: javascript function variables closures global

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是在全局范围内创建的,为什么它们在函数内部不可用?

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

1 个答案:

答案 0 :(得分:6)

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

的值

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

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); 
}