0

私は、以下に言い換えたように(変数宣言を表示することを気にせずに)行っていることに対してうまく機能する、やや型破りなforループを使用しています:

if (arr && arr.length > 0) {
    for (i = arr.length; i--; i) {
        element = arr.pop();
        //rest of code
    }
}

クロージャコンパイラから、「警告-疑わしいコード。このコードには副作用がありません。バグはありますか?」という警告が表示されます。forループの親の最後の「i」を具体的に指します。

iを削除すると、jslintは警告をスローし、そのままにしておくと、クロージャーは警告をスローします。これらのループは全部で3つありますが、これを行うための「クロージャーフレンドリー」な方法はありますか?

4

4 に答える 4

3

通常の方法はどうですか?

if (arr && arr.length > 0) {
    for (i = arr.length; i > 0; --i) {
        element = arr.pop();
        //rest of code
    }
}

デクリメントをテストに入れることは、forループを作成する通常の方法ではありません。

またはさらに正常:

if (arr && arr.length > 0) {
    for (i = arr.length - 1; i >= 0; --i) {
        element = arr.pop();
        //rest of code
    }
}

...しかし、使用iしていないので、それはそれほど重要ではありません。

whileまたは、 :を使用することもできます

if (arr && arr.length > 0) {
    i = arr.length;
    while (i--) {
        element = arr.pop();
        //rest of code
    }
}
于 2012-05-25T21:16:31.667 に答える
1

将来の読者のために、配列の長さを短くする場合は、forループを使用せず、while:を使用してください。

if (arr) {
    while (arr.length) {
        element = arr.pop();
        ...
    }
}
于 2016-09-29T01:39:51.363 に答える
0

jslintではなくjshintを使用して、警告をオフにします。

于 2012-05-27T21:11:58.377 に答える
0

ええ-このような何かがトリックを行う必要があります:

for (i = arr.length; i > 0; i--) {
于 2012-05-25T21:17:29.123 に答える