Hem*_*ari 1 node.js ecmascript-5 ecmascript-6 arrow-functions
我正在尝试使用普通函数或箭头函数导出 .js 文件中的函数。但我不明白哪个是推荐的。
导出正常功能
module.exports = function(id) {
console.log(id);
};
Run Code Online (Sandbox Code Playgroud)
导出箭头函数
const test = id => {
console.log(id);
}
module.exports = test;
Run Code Online (Sandbox Code Playgroud)
以下是我心中的几个问题。
如果推荐普通函数而不是箭头函数,那为什么不推荐我使用箭头函数。
如果箭头函数比普通函数更推荐,那为什么不推荐我使用普通函数。
我怎么理解推荐的,尤其是在这种导出函数的场景中?
这两个片段并不相同。第一个片段生成匿名函数,而第二个片段生成命名函数require('...').name === 'test'(这可能对调试有用)。
更合适的比较是
module.exports = function test(id) {
console.log(id);
};
Run Code Online (Sandbox Code Playgroud)
对比
const test = id => {
console.log(id);
}
module.exports = test;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这些箭头和常规函数之间没有区别,因为它们不使用特定于它们的功能(例如this上下文)。
匿名箭头函数需要输入更少的字符,但是当需要通过临时test变量为函数命名时,这种好处就消失了。它们还可能导致更少的内存占用,尽管可以忽略此问题,因为差异可以忽略不计。
此外,如果将命名箭头函数转换为 ES5 ,命名箭头函数会产生比常规函数定义更冗长的输出:
const test = () => {}
Run Code Online (Sandbox Code Playgroud)
被转译为
var test = function test() {}
Run Code Online (Sandbox Code Playgroud)
虽然它可能是:
function test() {}
Run Code Online (Sandbox Code Playgroud)
这不是 Node.js 或其他 ES6 环境的问题。
TL;DR:如果一个函数需要有一个用于调试或其他目的的名称,那么使用:
module.exports = function test(id) {
console.log(id);
};
Run Code Online (Sandbox Code Playgroud)
如果函数不需要名称,则为:
module.exports = id => {
console.log(id);
};
Run Code Online (Sandbox Code Playgroud)
对于不使用特定于这些函数类型的特性的函数来说,这是正确的。
| 归档时间: |
|
| 查看次数: |
6589 次 |
| 最近记录: |