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

标签 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

最佳答案

通过将匿名函数声明包含在 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/

相关文章:

javascript - 如何访问 promise `.then` 方法之外的变量?

javascript - 将 json 传递给 Vue 组件并循环

javascript - 订阅大收藏

javascript - 是否可以在 node.js 的帮助下在 Windows 中将 JSLint 作为命令行运行?

javascript - 我的函数返回 'undefined'

PHP - 向我解释这个 while/for 循环

python - 如何在 Python 中使用 for 循环对 DataFrame 进行子集化和列出?

python - Python 中的列表迭代

node.js - NodeJS 未使用的变量

javascript - Web 部件 javascript 不适用于数组