我有一个将索引作为参数的函数:
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;
在我的扭曲思维中,输出awesomeArray
应该包含函数,这些函数都不包含任何参数,但所有这些都有不同的含义,因为index
在生成时在函数中是INTEGRATED。例如,以下调用执行不同的代码:
awesomeArray[0]();
awesomeArray[1]();
// and so on...
&#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;
问题:
答案 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