【问题标题】:node.js: export a normal function or arrow function?node.js:导出普通函数还是箭头函数?
【发布时间】:2019-02-24 19:06:27
【问题描述】:

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

导出普通函数

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

导出箭头函数

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

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

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

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

我如何理解推荐的,尤其是在导出函数的这种情况下?

【问题讨论】:

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


    【解决方案1】:

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

    更合适的比较是

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

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

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

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

    此外,如果将命名箭头函数转换为 ES5,则它们可能会导致比常规函数定义更详细的输出:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2019-04-12
      • 2017-03-13
      • 2020-05-07
      • 2019-01-17
      • 2015-11-03
      • 2015-11-05
      • 2022-12-06
      相关资源
      最近更新 更多