【问题标题】: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
支持旧环境。