2013-08-23 50 views
0

我不知道爲什麼我在下面的代碼片段(改編自JavaScript closure inside loops – simple practical example)得到一個錯誤:測試重寫一個簡單的循環與即時功能

var funcs = {}; 
for (var i = 0; i < 3; i++) {   // let's create 3 functions 
    funcs[i] = (function(n) {   // and store them in funcs 
     console.log("My value: " + n); // each should log its value. 
    })(i); 
} 
for (var j = 0; j < 3; j++) { 
    funcs[j]();      // and now let's run each one to see 
} 

看起來這應該運行正常;我知道這只是我沒有完全得到的東西。

這裏是errror我得到: enter image description here

THX任何幫助

+2

你設置'funcs中[I]'給一個函數,而不是函數本身的結果。你用'i'作爲參數來調用它。 – Dave

+2

將來的參考:'console.log(funcs)':檢查它是否包含你期望它包含的內容。 – Dave

+0

@Dave你應該回答這個問題。 –

回答

2

你需要返回的函數,而不是函數的結果。嘗試:

funcs[i] = (function(n) { 
    return function() { 
    console.log("My value: " + n); 
    } 
})(i); 

例子:

> var funcs = {}; 
for (var i = 0; i < 3; i++) { 
    funcs[i] = (function(n) { 
    return function() {console.log("My value: " + n);} 
    })(i); 
} 
for (var j = 0; j < 3; j++) { 
    funcs[j]();     
} 
My value: 0 
My value: 1 
My value: 2 
+0

thx @mishik需要等幾分鐘 – timpone