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

JSlint - make function within for loop vs. evaluating function

本文关键字:函数 评估 循环 for JSlint      更新时间:2023-09-26

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

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 抱怨。

我知道使用循环的重复表达式定义多个函数

最终会创建多个函数,每个函数都保留最后一个重复表达式的值(因为每个循环没有不同的范围);

但在这种情况下,由于我正在立即评估函数,我想不出i的实际值会发生变化的情况;

我已经解决了使用 forEach 方法的问题,但想了解为什么这最终会导致问题。

小提琴

通过将匿名函数声明包含在 for (var i in o) { 中,您每次迭代时都会重新定义它,而不仅仅是一次,无论它是否"立即调用"——我会指出您对重新定义的疏忽是您想要从代码中删除该结构的原因。

所以你想要么摆脱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);