node.js: 导出普通函数还是箭头函数?

node.js: export a normal function or arrow function?

我正在尝试使用普通函数或箭头函数在 .js 文件中导出一个函数。但是我不明白推荐哪个。

导出正常函数

module.exports = function(id) {
   console.log(id);
};

导出箭头函数

const test = id => {
  console.log(id);
}
module.exports = test;

以下是我心中的几个问题。

  1. 如果建议使用普通函数而不是箭头函数,那为什么我 不推荐使用箭头函数。

  2. 如果建议使用箭头函数而不是普通函数,那么为什么不推荐我使用普通函数。

如何理解推荐的,尤其是导出函数这种场景?

这两个片段并不相同。第一个片段产生匿名函数,而第二个片段产生命名函数,require('...').name === 'test'(这可能对调试有用)。

比较合适的比较是

module.exports = function test(id) {
   console.log(id);
};

const test = id => {
  console.log(id);
}
module.exports = test;

在这种情况下,这些箭头和常规函数之间没有区别,因为它们不使用特定于它们的功能(例如 this 上下文)。

匿名箭头函数需要更少的字符来输入,但是当需要通过临时 test 变量给函数命名时,这个好处就消失了。它们也可能导致更少的内存占用,尽管可以忽略这个问题,因为差异可以忽略不计。

此外,如果将命名箭头函数转换为 ES5,则命名箭头函数可能会导致比常规函数 definitions 更冗长的输出:

const test = () => {} 

被转译为

var test = function test() {}

虽然可能是:

function test() {}

这不是 Node.js 或其他 ES6 环境的问题。


TL;DR:如果一个函数需要有一个名称用于调试或其他目的,使用:

是有意义的
module.exports = function test(id) {
   console.log(id);
};

如果函数不需要名称,则为:

module.exports = id => {
  console.log(id);
};

对于不使用特定于这些函数类型的功能的函数,这是正确的。