混淆jquery队列和出队

时间:2012-06-27 09:25:59

标签: jquery arrays for-loop queue

我有一个数组,我想使用jquery队列和打印函数将它们打印出来:

var show = function (el) { //print function 
    console.log('el', el);
}

var arr = ["a", "b", "c", "d", "e"];
var que = $({});
for (var i in arr) {
    que.queue('custom', function (next) {
        show(arr[i]);
        next();
    })
}
que.dequeue('custom');

但是所有打印信息都是e,为什么会发生这种情况?打印怎么样就像数组顺序一样?

第二个问题是当我尝试改变for循环编写的方式时,例如:

for (var i = 0; i < arr.length; i++) {
    //...
}

所有打印信息均为undefined。这两种写作方式有区别吗?总是那样,不是吗?

以下是演示:http://jsfiddle.net/hh54188/L8ExM/

1 个答案:

答案 0 :(得分:0)

这是一个范围问题。当您的函数被调用时,内部函数中的变量i等于arr.length,因此arr[i]undefined。你需要用匿名函数包装它:

var show = function (el) {
    console.log('el', el);
}

var arr = ["a", "b", "c", "d", "e"];
var que = $({});
for (var i = 0; i < arr.length; i++) {
    (function(i) {
        que.queue('custom', function (next) {
            show(arr[i]);
            next();
        });
    })(i);
}
que.dequeue('custom');

此外,当您使用for (var i in arr)时,您会获得e,因为循环会停在最后一个4元素处。第一个循环在5停止,因为在增量后检查条件。