所以我在我的 JS 编译器中收到了一个警告,但是你能向我解释一下这是否真的会影响我的代码的执行方式吗?
for (x = 0; x < levels.length; x++) {
var level = levels[x];
var candlesOnLevel = $.grep(relevantCandles, function(candles, index) {
return parseInt($(candles).css("top").replace(/px/, "")) === level;
});
}
为什么会收到警告
正如@RGraham 在评论中提到的,js 编译器假设 $.grep()
的第二个参数是一个回调函数,并且正在异步执行(至少它看起来像这样 语法上)。然而,事实并非如此,因为第二个函数实际上是一个过滤函数。查看API docs
通常会收到警告 Mutable Variable is accessible from closure
当
在 for 循环中使用 async
函数。那是因为整个 for 循环
只有一个作用域。这意味着在每次迭代中,您最终都会捕获相同的变量。所以回调会得到错误的 id,因为 level
(可变的)会在调用回调之前改变。幸运的是,您正在处理的情况并非如此(因为 $.grep 不是异步的):)
...could you explain to me if this will actually affect the way my code
will execute?
不,这样的警告不会影响您的代码的结果。
您可以简单地忽略该警告,但如果您仍然想避免这种情况,您可以将内容放入闭包中。
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;
});
})();
}