Javascript 如何在循环中创建闭包并将其存储在变量中以供以后执行
请参阅下面的代码。我试着把它剥光 我有一个队列数组。我想迭代10次。在每次迭代中,我想创建一个函数,该函数对j具有适当范围的引用(即第一次迭代中的j=0,第二次迭代中的j=1,等等) 我想将该函数存储在变量f中,然后将f添加到_队列数组中,以便稍后调用它 当然,问题是在第一个循环的每次迭代中,它不是将闭包存储在f中,而是立即执行闭包 我的问题是:如何存储带有适当j变量的函数,以便将其添加到_队列数组中Javascript 如何在循环中创建闭包并将其存储在变量中以供以后执行,javascript,closures,Javascript,Closures,请参阅下面的代码。我试着把它剥光 我有一个队列数组。我想迭代10次。在每次迭代中,我想创建一个函数,该函数对j具有适当范围的引用(即第一次迭代中的j=0,第二次迭代中的j=1,等等) 我想将该函数存储在变量f中,然后将f添加到_队列数组中,以便稍后调用它 当然,问题是在第一个循环的每次迭代中,它不是将闭包存储在f中,而是立即执行闭包 我的问题是:如何存储带有适当j变量的函数,以便将其添加到_队列数组中 _queue = []; for (j = 0; j < 10; j+
_queue = [];
for (j = 0; j < 10; j++) {
var f =
(function (index) {
alert(index);
})(j); //code is executed here instead of stored in the f variable
_queue.push(f); //Add f
}
for (k = 0; k < _queue.length; k++){
_queue[k].call();
}
\u队列=[];
对于(j=0;j<10;j++){
变量f=
(功能(索引){
警报(索引);
})(j) ;//代码在此处执行,而不是存储在f变量中
_queue.push(f);//添加f
}
对于(k=0;k<_queue.length;k++){
_队列[k]。调用();
}
使用立即函数(或通常使用函数)引入新范围是正确的。但您必须从立即函数返回一个函数:
var f = (function (index) {
return function() {
alert(index);
};
}(j));
比my快几秒钟:)+1+1,顺便说一句,实际上没有必要将函数调用括在括号中(就像说
var f=(10);
)