开发者

How to create closure in loop and store it in variable for later execution

See code below. I've tried to strip it to its bare bones.

I have a _queue array. I want to iterate 10 times. On each iteration, I want to create a function that has a properly scoped reference for j (i.e. j=0 on the first iteration, j=1 on the second iteration, etc.)

I want to store that function in variable f, and then add f to the _queue array so I can call it later.

The problem of course is that on each iteration of the first loop, instead of storing the closure in f, it immediately executes the closure.

My question is this: How do I store the function with its proper j variable so that I can add it to the _queue array?

    _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.p开发者_如何转开发ush(f);  //Add f 

    }

    for (k = 0; k < _queue.length; k++){
        _queue[k].call();
    }


Using an immediate function (or in general using a function) to introduce a new scope is correct. But you have to return a function from the immediate function:

var f = (function (index) {
    return function() {
       alert(index);
    };
}(j));     
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜