0

以下のループは、i=0 に対して 1 回実行され、次に i=1 に対して無期限に実行され、ブラウザーがクラッシュします。つまり、i はインクリメントされません。

cascadeComponent: function(item, fn, scope) {
    if (fn.call(scope || this, item) !== false) {
        if (item.items) {
            for (i = 0; i < item.items.items.length; i++) {
                this.cascadeComponent(item.items.items[i], fn, scope);
            }
        }
    }
}

フレームワークの反復ループを使用することで、この問題を回避できます。あるいは、配列が item.items と item.items.items にあるというわずかな違いで同じループが動作しています。

なぜそれが起こるのですか?Chrome や Firefox でも同じです。

4

1 に答える 1

3

グローバルi変数を使用しています。関数の先頭に次の行を追加します。

var i;

iそれ以外の場合、各再帰呼び出しは のすべての呼び出しで 0 にリセットされますcascadeComponent

于 2013-02-08T05:56:07.897 に答える