最近,我發現自己需要創建一組函數。這些函數使用XML文檔中的值,並且我正在使用for循環通過適當的節點運行。但是,這樣做後,我發現只有XML表格的最後一個節點(對應於for循環的最後一次運行)曾被數組中的所有函數使用。Javascript:在For循環中創建函數
下面是展示這樣一個例子:
var numArr = [];
var funArr = [];
for(var i = 0; i < 10; ++i){
numArr[numArr.length] = i;
funArr[funArr.length] = function(){ return i; };
}
window.alert("Num: " + numArr[5] + "\nFun: " + funArr[5]());
輸出是民:5和樂趣:10
經研究,我發現了一個a segment of code that works,但我很努力準確地理解它爲什麼有效。我轉載在這裏用我的例子:
var funArr2 = [];
for(var i = 0; i < 10; ++i)
funArr2[funArr2.length] = (function(i){ return function(){ return i;}})(i);
window.alert("Fun 2: " + funArr2[5]());
我知道它與範圍有關,但乍一看似乎並不像它會從我的幼稚的做法不同的執行任何。我在Javascript中是一個初學者,所以如果我可能會問,爲什麼使用這個函數返回函數技術繞過了範圍問題?另外,爲什麼(i)包含在最後?
非常感謝您提前。
我是JS中的新手,非常感謝,在您發佈後,我學會了如何動態創建函數(回調函數)! – mineroot
非常有幫助。剛剛用這個來解決我的問題。 http://stackoverflow.com/questions/41254076/preventing-lazy-evaluation-in-function-called-by-fabric-js/41254197#41254197非常感謝。 –