【问题标题】:Warning Unexpected unnamed function func-names under, ESLint rule警告 ESLint 规则下的意外未命名函数 func-names
【发布时间】:2019-03-15 01:24:31
【问题描述】:

我的eslint 版本是4.18.2,它会给出这样的警告:

意外的未命名函数
期望一个赋值或函数调用,而是看到一个表达式

当以这种方式定义函数时:

 const farmerIds = a.reduce((function (hash) {
  return function (prev, curr) {
    !hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
    return prev;
  };
}(Object.create(null))), []);

【问题讨论】:

标签: javascript eslint rules


【解决方案1】:

如果我们需要在不声明的情况下导出,可以如下使用

export default () => {

// your code goes here

}

【讨论】:

  • 如果您需要访问this,这将不起作用
【解决方案2】:

这是两个不同的问题……

意外的未命名函数

正如康斯坦丁所指出的,这就是 ESLint 规则 func-names

如果您不想禁用此规则,您可以为函数使用名称,如下所示:

const farmerIds = a.reduce((function reducer(hash) {
  return function fn(prev, curr) {
    !hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
    return prev;
  };
}(Object.create(null))), []);

或者,我个人建议使用箭头函数:

const farmerIds = a.reduce(
  (hash => {
    return (prev, curr) => {
      !hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
      return prev;
    };
  })(Object.create(null)),
  []
);

预期的是赋值或函数调用,但看到的是表达式

ESLint 正在抱怨这一行,这确实是一个表达式,而不是赋值或函数调用:

!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));

您可以将其重写为if 语句:

if (!hash[curr.farmerId]) {
  hash[curr.farmerId] = prev.push(curr);
}

修复两者

将上面的代码示例放在一起,这段代码应该可以在没有 ESLint 报错的情况下运行:

const farmerIds = a.reduce(
  (hash => (prev, curr) => {
    if (!hash[curr.farmerId]) {
      hash[curr.farmerId] = prev.push(curr);
    }
    return prev;
  })(Object.create(null)),
  []
);

请注意,我还删除了第一个箭头函数主体周围的花括号,这是箭头的一个很好的附加功能,可以使代码更简洁。

【讨论】:

  • 我仍然收到警告“意外的未命名函数”
  • 您是否尝试将function (hash) {} 提取到const FUNCTIONNAME = function (hash) {},然后在您的reduce 中使用它。
  • 我已经更新了我的答案,你有两个不同的 ESLint 警告
  • 感谢您开始修复 Unexpected unnamed function,但作为提示,更新的 ESLint 为第二个建议抛出了 Expected parentheses around arrow function argument having a body with curly braces. (arrow-parens)。我不得不将其更改为喜欢 (hash) => 并删除您稍后添加的尾随括号。
猜你喜欢
  • 2021-01-15
  • 2018-03-31
  • 2017-10-13
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2020-09-05
相关资源
最近更新 更多