这可能已被问过几次,但我找不到。以下代码 - 当然 - 不是它明显的意图:
var arr = [];
var count = 10;
var funct = function() { console.log("count when called: ", count); };
while (count--) {
arr.push(funct);
}
for (i in arr) {
arr[i]();
}
我在每个for循环中都记录了-1,因为该函数访问了创建它的环境的计数值。和count在while循环后有-1值。
我需要的是将参数传递给函数的创建。任何提示?
答案 0 :(得分:1)
您的函数需要有一个参数,然后返回一个将使用该参数的函数,以便以后执行。这样的事情应该有效:
var arr = [];
var count = 10;
var funct = function(c) {
return function() {console.log("count when called: ", c);}
};
while (count--) {
arr.push( funct(count) );
}
for (i in arr) {
arr[i]();
}

答案 1 :(得分:1)
您可以做的是将函数funct
包装在第二个闭包中,以便创建变量计数的本地版本。
例如:
var arr = [];
var count = 10;
var funct = function () {
var currentCount = count;
return function() { console.log("count when called: ", currentCount); };
}
while (count--) {
arr.push(funct());
}
for (i in arr) {
arr[i]();
}
输出:
count when called: 9
count when called: 8
count when called: 7
count when called: 6
count when called: 5
count when called: 4
count when called: 3
count when called: 2
count when called: 1
count when called: 0
的jsfiddle: https://jsfiddle.net/gwswjtug/
打开控制台以查看结果。
答案 2 :(得分:1)
使用闭包 - http://www.w3schools.com/js/js_function_closures.asp
var arr = [];
var count = 10;
var funct = function(i) {
return function() {
console.log("count when called: ", i);
}
}
while (count--) {
arr.push(funct(count));
}
arr.forEach(function(fn) {
fn();
});