警告ESLint规则下的意外未命名函数func-names

时间:2018-10-10 07:39:37

标签: javascript eslint rules

我的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))), []);

2 个答案:

答案 0 :(得分:3)

这是两个不同的问题……

意外的未命名函数

正如康斯坦丁指出的那样,这是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)),
  []
);

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

答案 1 :(得分:0)

如果需要不声明就导出,可以如下使用

export default () => {

// your code goes here

}