在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