0

こんにちは皆さん、jquery に小さなコードがあり、問題があります。for ループが 2 番目のパラメーター (i = 2 の場合) を飛び越えているようですが、何が問題なのか教えていただけますか?

コードは次のとおりです。

    var items = $(".item").length;
    var currentIndex = items;

    place(currentIndex);

    function place(index){
        var s1 = Math.floor(items / 2);

        for (i = 1; i <= items; i++){
            (function(i, index){

                if (i <= s1){
                    var id = findNext(1, i);
                    console.log("i = " + i + " > id = " + id);
                } else if ( i > s1){
                    console.log("i = " + i);
                }

            })(i, index);
        }
    }

    function findNext(index, times){
        var result = index;

        for (i = 1; i <= times; i++){
            if (result == items){
                result = 1;
            } else {
                result ++;
            }
        }

        return result;
    }

コンソール出力はこれを示します:

i = 1 > id = 2
i = 3
i = 4

for ループが 2 番目のパラメーターを飛び越えているようです (i = 2 の場合) 何が問題なのか教えていただけますか?

4

2 に答える 2

1

var id = findNext(1, i);スクーピングが原因で代入は 3 を返しますi=2。このリンクを参照してください: http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/

于 2012-10-13T11:18:37.883 に答える
1

関数内のプライマリ ループでplace、グローバル変数を定義しますi。内部で同じことを行い、元の変数findNextを上書きします。キーワードを使用してi定義し、作成されたスコープ内でのみアクセスできるようにします。ivar

for (var i = 0; i <= items; i++) {
于 2012-10-13T11:21:00.363 に答える