我有一个数组,我想使用 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
处停止,因为在增量后检查条件。