Javascript 传递给Array.prototype.every的函数中的“可从闭包访问可变变量”

Javascript 传递给Array.prototype.every的函数中的“可从闭包访问可变变量”,javascript,closures,webstorm,Javascript,Closures,Webstorm,代码将比我说得更清楚: var candidateIndex = 0; var minValue = Number.MAX_VALUE; topArray.every(function(element, index) { if (element.innerArray && element.innerArray.length < minValue) { minValue = element.innerArray.length; cand

代码将比我说得更清楚:

var candidateIndex = 0;
var minValue = Number.MAX_VALUE;
topArray.every(function(element, index) {
    if (element.innerArray && element.innerArray.length < minValue) {
        minValue = element.innerArray.length;
        candidateIndex = index;
        if (minValue == 0) {
            return false;
        }
    }
    return true;
});

// ... use minValue and candidateIndex
这样做的目的是遍历topArray,并查找该数组中具有长度为0的innerArray的第一个成员,否则将查找具有最小长度innerArray的成员。它工作得很好,但是我的检查器准确地报告了可变变量,可以从闭包中访问它

我发现这通常是一件坏事,特别是对于异步代码。我已经看过了,并且了解到,在这些情况下,匿名函数是异步的,最好是存储可变变量的状态,但在我的情况下,我希望调用同步匿名函数来更改变量

在这种情况下,我得到的警告是错误的,我应该忽略它,对吗?除了使用for循环而不是each之外,还有什么方法可以在不出现警告的情况下获得我想要的功能吗


更新:值得一提的是,警告似乎来自我的WebStorm IDE本身,而不是任何分析工具插件。

从上面的评论中得到确认,该警告基本上是误报,我修改了代码以忽略警告消息:

topArray.every(function(element, index) {
    //noinspection JSReferencingMutableVariableFromClosure
    if (element.innerArray && element.innerArray.length < minValue) {
        minValue = element.innerArray.length;
        candidateIndex = index;
        //noinspection JSReferencingMutableVariableFromClosure
        if (minValue == 0) {
            return false;
        }
    }
    return true;
});
警告仅在比较值时触发,而不是在设置值时触发


我渴望听到任何其他答案,但如果我没有,我将在大约一周后接受此答案。

什么工具报告此问题?如果将这些跟踪变量存储在函数本身上,您还会收到警告吗?在每次调用函数之前,是否将其设置为函数?为了避免警告,这似乎有很多令人困惑的代码。我的目标:忽略警告。@Scott:Hm,事实上,我从两个工具的在线版本中都没有得到这个消息。请你调查一下好吗?^^我只是用===来比较零,在minValue==0;很好的建议,但没有其他警告。@elclanrs这里也一样。我怀疑这是WebStorm发出的警告。