在an answer to this question代替,我可以看到被保留通過排序扔進另一個函數的i
值:爲什麼一個函數在這個例子中返回的只是一個字符串
var funcs = [];
function createfunc(i) {
return function() { console.log("My value: " + i); };
}
for (var i = 0; i < 3; i++) {
funcs[i] = createfunc(i);
}
for (var j = 0; j < 3; j++) {
funcs[j](); // and now let's run each one to see
}
http://jsbin.com/raxifitaberu/1/edit
爲什麼函數createfunc()
需要返回另一個函數?這是爲什麼任何不僅僅是返回字符串更好:
var myArray = [];
function createFunc(i){
return "My value: " + i;
};
for (var i = 0; i < 5; i++){
myArray[i]=createFunc(i);
}
console.log(myArray[0]);
console.log(myArray[1]);
console.log(myArray[2]);
http://jsbin.com/demiloronohe/1/edit
有一些優勢,把功能return
後面?
這只是一個簡單的例子。在更復雜的情況下,返回的函數可能需要額外的參數。對於這種情況,你可以只返回字符串,但這並不能說明閉包是如何工作的, - ) – Sirko 2014-08-30 17:51:34
@Sirko第二個例子沒有說明閉包?它看起來像是保存了'i'的值,與返回的函數相同 – 1252748 2014-08-30 17:58:54
第二個示例僅僅是一個函數調用並保留了(字符串)結果的指針。也許閱讀[如何JavaScript閉包工作?](http://stackoverflow.com/q/111102/1169798)一些更清晰的實際封閉。 – Sirko 2014-08-30 18:14:35