javascript:在数组中保存带有变量参数的函数

时间:2015-05-24 13:28:52

标签: javascript

这可能已被问过几次,但我找不到。以下代码 - 当然 - 不是它明显的意图:

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值。

我需要的是将参数传递给函数的创建。任何提示?

3 个答案:

答案 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();
});

小提琴:http://jsfiddle.net/ort1t6e2/