node.js:导出正常功能还是箭头功能?

时间:2018-09-20 12:53:17

标签: node.js ecmascript-6 ecmascript-5 arrow-functions

我正在尝试同时使用正常或箭头功能将功能导出到.js文件中。但是我不知道推荐哪个。

导出正常功能

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

导出箭头功能

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

下面是我的一些疑问。

  1. 如果在箭头功能上建议使用普通功能,那我为什么 不建议使用箭头功能。

  2. 如果建议使用箭头功能而不是普通功能,那么为什么不建议我使用普通功能。

我如何理解推荐的语言,特别是在导出函数的情况下?

1 个答案:

答案 0 :(得分:2)

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

更合适的比较是

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

vs

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);
};

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