【问题标题】:Babel arrow function compilation into ES5Babel 箭头函数编译成 ES5
【发布时间】:2017-07-13 13:19:01
【问题描述】:

使用Babel 我发现有些奇怪。

const app = () => {} 不应等于 var app = function() {} ?

Babel 返回var app = function app() {}

【问题讨论】:

  • 不,babel 是正确的,因为分配给 var 的箭头函数理论上应该具有与该 var 的名称等效的名称属性,以帮助进行堆栈跟踪。查看this链接。

标签: javascript ecmascript-6 babeljs


【解决方案1】:

不,babel 是正确的,因为分配给 var 的箭头函数理论上应该具有与该 var 的名称等效的名称属性,以帮助堆栈跟踪和反射。查看this 链接了解更多信息。快速总结,以防它过时:

函数的名称属性是在声明时创建的。函数表达式的名称属性是从名称绑定中推断出来的:

var foo = function() {};
console.log(foo.name); // foo

箭头函数具有相同的行为:

var foo = () => {};
console.log(foo.name); // foo

由于直到 ES 2015/ES 6 babel 必须实际添加名称以创建 named function expression,它才真正标准化:

var foo = function foo() {}; // notice it's function *foo* now

支持旧环境。

【讨论】: