闭包编译器警告 for 循环

Closure compiler warning on for loop

本文关键字:循环 for 警告 编译器 闭包      更新时间:2023-09-26

我正在使用一个有点非常规的 for 循环,它适用于我正在做的事情,如下所示(懒得显示变量声明):

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

闭包编译器给我一个警告:"警告 - 可疑代码。 这段代码没有副作用,有bug吗?专门指向 for 循环参数中的最后一个"i"。

如果我删除 i,jslint 会抛出警告,如果我离开它,关闭会抛出警告。 总共有三个这样的循环,有没有一种"闭包友好"的方法可以做到这一点?

如何"正常方式"?

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
    }
}

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

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

是的 - 像这样的东西应该可以解决问题:

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

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