3
我有一个功能,看起来像这样:的JSLint - 让内for循环功能与评价功能
function strip(o) {
for (var i in o) {
var test = basic.arr.some(function(x) {return x === i});
//JSlint -- don't make functions within loop
if (test)
delete o[i];
}
return o;
}
代码工作和JSLint的抱怨。我知道使用循环的重复表达式定义多个函数将最终创建多个函数,每个函数保留最后一个重复表达式的值(because each loop doesn't have a distinct scope);
但在这种情况下,由于我正在评估功能,我不能想到i
的实际值会改变的情况;
我已经解决了使用forEach方法,但想知道为什么这最终会导致问题。
这非常例子就好了......既然你要创建一个方法,调用它在一个单行同步忘掉它。尽管通常这是一个相当容易出错的方法:创建一个匿名函数,在局部范围之外使用一个变量,并且在一个循环中,很可能会对你造成伤害。我相信jslint的规则只是不考虑一般规则的这种例外。 –
我想你已经在想这个了。您不要在循环中定义函数,因为它不是干的。为什么不[先定义函数](http://stackoverflow.com/a/3038555/1028230)作为JSLint请求?又名,“这个问题与[通常的东西]不同(http://stackoverflow.com/questions/3037598/how-to-get-around-the-jslint-error-dont-make-functions-within-a -loop?rq = 1)on [同一主题](http://stackoverflow.com/questions/3927054/jslint-error-dont-make-functions-within-a-loop-leads-to-question-about- Java类?RQ = 1)?”我认为你有一个愚蠢(但我会等待听到你/ B4投票结束)。 – ruffin
@ruffin这里的主要区别在于,内联函数将在循环运行时执行,而不是之后执行。 JSLint的警告是试图防止可能导致问题后来出现问题的关闭,这里介绍的很好,可以说是最正确的写法。你可以在不进行内联回调的情况下重写这段代码,但它看起来(imo)更糟糕,因为没有真正的好处。我会使用注释在这里禁用jslint警告。 –