Почему вы получаете предупреждение
Как @RGraham упоминалось в комментариях JS компилятор предполагает, что второй параметр $.grep()
является функцией обратного вызова и выполняется асинхронно (по крайней мере, это то, что это выглядит синтаксически). Однако это неверно, потому что вторая функция фактически является функцией фильтра . См API docs
Один обычно получает предупреждение Mutable Variable is accessible from closure
при использовании async
функции внутри для цикла. То потому что весь for loop
имеет одну область. Это означает, что на каждой итерации вы должны получить одну и ту же переменную. Таким образом, обратный вызов получит неправильные идентификаторы, потому что 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
Предупреждение - это просто «Переменная переменная доступна из-за закрытия», за что ответит! –