爲什麼你得到
由於@RGraham在評論中提到的,JS編譯器假定到$.grep()
秒參數是一個回調函數的警告,被異步執行(這ATLEAST是什麼樣子,句法)。但那不是真的,因爲第二個功能實際上是過濾功能。請參閱API docs
當在for循環中使用async
函數時,通常會得到Mutable Variable is accessible from closure
的警告 。那是因爲整個for loop
都有一個範圍。這意味着在每次迭代中,最終都會捕獲相同的變量。所以回調會得到錯誤的ID,因爲level
(可變)將在調用回調之前更改。幸運的是,那不是你正在處理(因爲$ .grep不是異步):)的情況下
...你能不能給我解釋一下這是否會實際影響我的代碼 將執行的方式嗎?
不,這樣的警告不會影響你的代碼的結果。
您可以簡單地忽略該警告,但如果您仍想避免這種情況,可以將內容放入閉包中。
for (x = 0; x < levels.length; x++) {
(function(){
var level = levels[x];
var candlesOnLevel = $.grep(relevantCandles, function(candles, index) {
return parseInt($(candles).css("top").replace(/px/, "")) === level;
});
})();
}
你得到的警告是什麼? – Tushar
你的代碼很好。編譯器假定傳遞給'$ .grep'的回調是異步的,但事實並非如此。 – CodingIntrigue
警告只是「可變的變量是可以從閉包訪問」,ty雖然答案! –