我有一个看起来像这样的函数:
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 方法的问题,但我想了解为什么这最终会导致问题。
最佳答案
通过将匿名函数声明包含在 for (var i in o) {
中,您每次迭代时都会重新定义它,而不仅仅是一次,无论它是否“立即调用” -- 我会指出您对该重新定义的疏忽是您想从您的代码中删除该构造的原因。
所以你想要摆脱 for
或者你需要更早地定义函数。我将采纳“更多”JSLint 的建议,同时去掉 for
。
JSLint.com 上的这个 lints 是这样的:
/*jslint white:true, devel:true */
var obj = {
a: true,
b: true,
c: true
};
var basic ={
arr: ['a', 'b']
};
function strip(o) {
"use strict";
var test;
Object.keys(o).forEach(function (i) {
test = basic.arr.some(function (x) { return x === i; });
if (test) {
delete o[i];
}
});
return o;
}
strip(obj);
console.log(obj);
关于javascript - JSlint - 在 for 循环内创建函数与评估函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994740/