Javascript 如何在循环中创建闭包并将其存储在变量中以供以后执行

Javascript 如何在循环中创建闭包并将其存储在变量中以供以后执行,javascript,closures,Javascript,Closures,请参阅下面的代码。我试着把它剥光 我有一个队列数组。我想迭代10次。在每次迭代中,我想创建一个函数,该函数对j具有适当范围的引用(即第一次迭代中的j=0,第二次迭代中的j=1,等等) 我想将该函数存储在变量f中,然后将f添加到_队列数组中,以便稍后调用它 当然,问题是在第一个循环的每次迭代中,它不是将闭包存储在f中,而是立即执行闭包 我的问题是:如何存储带有适当j变量的函数,以便将其添加到_队列数组中 _queue = []; for (j = 0; j < 10; j+

请参阅下面的代码。我试着把它剥光

我有一个队列数组。我想迭代10次。在每次迭代中,我想创建一个函数,该函数对j具有适当范围的引用(即第一次迭代中的j=0,第二次迭代中的j=1,等等)

我想将该函数存储在变量f中,然后将f添加到_队列数组中,以便稍后调用它

当然,问题是在第一个循环的每次迭代中,它不是将闭包存储在f中,而是立即执行闭包

我的问题是:如何存储带有适当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);