[英]How to write a function similar to Array.prototype.every() but for “almost every”
[英]“Mutable variable is accessible from closure” in a function passed to Array.prototype.every
代碼會比我說得更清楚:
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
。 它工作正常,但是我已經准確地報告了檢查器“可從閉包訪問可變變量”。
我看到這通常是一件壞事,尤其是對於異步代碼。 我已經仔細研究了如何避免從閉包中 訪問可變變量以及如何 在事件閉包中訪問可變變量 ,並了解到在這種情況下,匿名函數是異步的,並且最好在當時存儲可變變量的狀態,但就我而言,我希望我調用的同步匿名函數來更改變量。
在這種情況下,我得到的警告是錯誤的,我應該忽略它,對嗎? 除了使用for
循環而不是every
,還有什么方法可以在沒有警告發生的情況下獲得我想要的功能?
更新:就其價值而言,警告似乎確實來自我的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;
});
(警告僅在比較值時觸發,而不是在設置時觸發。)
我很想聽聽其他答案,但如果沒有,我會在大約一周內接受這個答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.