SLaks 是正确的,并且遵循该建议的最小重构(没有具体讨论这里发生的事情的优点)如下所示:
/*global $, onclickHelper */
var i, id, fnCached;
// cache your function instead of creating each time in your loop
fnCached = function() {
var isChecked = this.checked;
onclickHelper(isChecked, this.id);
};
for (i = 1; i !== 4; i += 1) {
id = "index" + i + "id";
if ($(id).length) {
$(id).click(fnCached()); // then simply call it
}
}
正如他所说,JSLint 只是希望您更有效地运行事物,并且由于您可以将函数缓存在变量中,因此在循环之外但在相同的范围和poof中声明,您就完成了。
巧妙的是,“因为”提升,如果你i
在函数中使用并fnCached
在循环之前声明,上下文“旅行”就像你在循环中声明一样,所以这个快速缓存技巧几乎总是有效的(尽管如果声明更进一步的范围确实有意义,那就去做吧)。
/*jslint browser: true */
this.spam = "spam";
var i, fnCached;
fnCached = function () {
// i's scope pervades the snippet here
window.alert(this.spam + " " + i);
};
for (i = 0; i < 3; i += 1) {
fnCached();
}
这样会提醒“垃圾邮件 0”、“垃圾邮件 1”和“垃圾邮件 2”。
小提琴