JSlint - 在for循环与评估函数中创建函数

时间:2016-01-25 14:15:32

标签: javascript for-loop jslint

我有一个看起来像这样的函数:

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方法但想了解为什么这最终会导致问题。

fiddle

1 个答案:

答案 0 :(得分:1)

通过在for (var i in o) {中附上匿名函数声明,您每次迭代时都会重新定义它,而不仅仅是一次,无论是否立即调用"""立即调用#34} ; - 并且我指出您对重新定义的监督是您希望从代码中删除该构造的原因。

所以你想要摆脱for或者你需要更早地定义函数。我要去"更多" JSLint的建议和摆脱for

这是在JSLint.com上发布的:

/*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);