0

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

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/

4

1 回答 1

0

这是一个范围界定问题。当您的函数被称为i内部函数中的变量等于 时arr.lengtharr[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');

Also, when you use for (var i in arr) you get e, because the loop stops at the last element which is 4. The first loop stops at 5 because the condition is checked after incrementation.

于 2012-06-27T09:37:13.517 回答