代码会比我说的更清楚:
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
,并找到该数组的第一个成员innerArray
长度为 0,否则找到长度最小的innerArray
。它工作正常,但是我准确地报告了“可变变量可以从闭包中访问”的检查器。
我发现这通常是一件坏事,特别是对于异步代码。我已经看过了如何避免从闭包中访问可变变量 and 访问事件闭包中的可变变量,并了解在这些情况下,匿名函数是异步的,并且需要存储当时可变变量的状态,但就我而言,我want我调用来更改变量的同步匿名函数。
在这种情况下,我收到的警告是错误的,我应该忽略它,对吧?除了使用for
循环而不是every
,有什么方法可以在不出现警告的情况下获得我想要的功能?
Update:无论如何,该警告似乎确实来自我的 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;
});
(警告仅在比较值时触发,而不是在设置值时触发。)
我渴望听到任何其他答案,但如果没有,我会在大约一周后接受这个答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)