for循环中的闭包编译器警告

时间:2012-05-25 21:14:32

标签: javascript google-closure-compiler

我正在使用一个有点非传统的for循环,它适用于我正在做的事情,如下所述(不打扰显示变量声明):

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

Closure编译器给我一个警告:“警告 - 可疑代码。这段代码没有副作用,是否有错误?”专门针对for循环parens中的最后一个“i”。

如果我删除了i,jslint会抛出一个警告,如果我离开它,关闭会发出警告。总共有三个循环,是否有“关闭友好”的方式来做到这一点?

4 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

对于未来的读者,如果要减少数组的长度,请不要使用for循环,请使用while

if (arr) {
    while (arr.length) {
        element = arr.pop();
        ...
    }
}

答案 2 :(得分:0)

是的 - 这样的事情可以解决问题:

for (i = arr.length; i > 0; i--) {

答案 3 :(得分:0)

使用jshint而不是jslint并关闭警告。