我有一个数组,我想使用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
。这两种写作方式有区别吗?总是那样,不是吗?
答案 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
停止,因为在增量后检查条件。