动态生成一个集成参数的函数数组?

时间:2016-08-02 20:00:38

标签: javascript arrays

我有一个将索引作为参数的函数:



function awesomeFunction(index) {
  console.log(index); // does awesome stuff depending on the index
}




现在,我想动态创建一个这样的函数数组,每个函数都使用NO PARAMETER AT ALL。以下是我的想法:



function generateAwesomeFunction(index) {
  return function () {
    console.log(index);
  }
}

var awesomeArray = [];

for (var i=0 ; i<something ; i++) {
  awesomeArray.push(generateAwesomeFunction(i));  
}
&#13;
&#13;
&#13;

在我的扭曲思维中,输出awesomeArray应该包含函数,这些函数都不包含任何参数,但所有这些都有不同的含义,因为index在生成时在函数中是INTEGRATED。例如,以下调用执行不同的代码:

&#13;
&#13;
awesomeArray[0]();
awesomeArray[1]();
// and so on...
&#13;
&#13;
&#13;

一个正在运行的例子是:

&#13;
&#13;
function awesomeFunction(index) {
  console.log(index); // does awesome stuff depending on the index
}

function generateAwesomeFunction(index) {
  return function () {
    console.log(index);
  }
}

var awesomeArray = [];

for (var i=0 ; i<5 ; i++) {
  awesomeArray.push(generateAwesomeFunction(i));  
}

awesomeArray[0](); // 0
awesomeArray[1](); // 1
awesomeArray[2](); // 2
// and so on...
&#13;
&#13;
&#13;

问题:

  1. 有用吗? ---&GT;是的!
  2. 是否有更好的方法来生成该函数数组?

1 个答案:

答案 0 :(得分:2)

使用bind和部分应用程序从awesomeFunction创建一个始终使用特定index参数调用的新函数。在这种情况下,你对函数的价值this无关紧要。

您不需要generateAwesomeFunction功能。

function awesomeFunction(index) {
  console.log(index); // does awesome stuff depending on the index
}
var awesomeArray = [];

for (var i=0 ; i<5 ; i++) {
  awesomeArray.push(awesomeFunction.bind(this, i));  
}

awesomeArray[0](); // 0
awesomeArray[1](); // 1
awesomeArray[2](); // 2