混淆 jquery 队列和取消队列



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

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/

这是一个范围问题。当你的函数被称为变量时,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 处停止,因为在增量检查条件。

最新更新