0

配列があります。jqueryキューと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、なぜこれが起こったのですか?印刷はどのように配列の順序のようになりますか?

2番目の質問は、forループの書き込み方法を次のように変更しようとしたときです。

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

すべての印刷情報はになりますundefined。2つの書き方に違いはありますか?いつも同じですよね?

デモは次のとおりです:http://jsfiddle.net/hh54188/L8ExM/

4

1 に答える 1

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)getを使用eすると、最後の要素である でループが停止するためです4インクリメント後5に条件がチェックされるため、最初のループは で停止します。

于 2012-06-27T09:37:13.517 に答える