所以我的 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 http://api.jquery.com/jquery.grep/
通常会收到警告Mutable Variable is accessible from closure
什么时候
使用一个async
for 循环内的函数。那是因为整个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;
});
})();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)