【发布时间】:2014-08-30 17:46:47
【问题描述】:
在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 第二个例子怎么没有说明一个闭包?似乎它与返回的函数保持
i的值相同 -
第二个例子只是一个函数调用,并为(字符串)结果保留一个指针。也许阅读 How do JavaScript closures work? 以更清楚地了解闭包的实际含义。
标签: javascript function functional-programming closures