我在循环中创建了两个匿名函数,但jshint
仅在anon函数引用未传递给它的变量时发出警告。
为什么会这样?
(function(){
for(var i=0; i<5; ++i){
var age = 9001;
//This has a jshint warning, as it uses age
var cutoffs = [1800,12000].map(function(cutoff){
return cutoff < age;
});
//but this doesn't cause a warning, despite creating a function inside a loop
var cutoffs2 = [1800,12000].map(function(cutoff){
return cutoff < 42;
});
}
})();
答案 0 :(得分:3)
这只是一个应该改变的坏警告。
从我开的jshint issue:
最初报告了所有功能的警告 在一个循环中。直到gh-1887(在2.5.7版本中发布)才开始 警告仅限于具体案件,根据其所涉及的约束 关闭。该文本可能当时也应该更新。
只要处理完毕,它将由jshint pull request 3058修复。
答案 1 :(得分:0)
只要函数在循环内(在下一次刺激之前)同步执行或不引用计数器(i),就不会有任何意外结果。
有关问题的完整说明和解决方法,请参见http://linterrors.com/js/dont-make-functions-within-a-loop
https://github.com/jshint/jshint/pull/1887#issuecomment-57963322
只是转瞬即逝...为什么在这里停下来?实际上,唯一危险的循环函数是在函数内部使用循环变量而不关闭它的函数。
我知道这是朝着正确方向迈出的一步,但是在这里使用外部作用域变量并不是危险的,它本身就是循环变量。我们应该对此检查进行更宽大的处理。