2013-03-21 84 views
1
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是在全局範圍內創建的,爲什麼它們在函數內部不可用?全局變量不能在匿名函數內工作

(我想解釋,爲什麼這是不行的,我發現了一種方式來獲得可以通過另一個函數進行包裝工作,只是想了解)

+0

工作方式與預期一樣 - > [** FIDDLE **](http://jsfiddle.net/jrP7Z/),但是'i'的值會發生變化,就像您期望的那樣。 – adeneo 2013-03-21 20:58:00

回答

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); 
} 
相關問題