为什么你得到
由于@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虽然答案! –