为什么在将我的
javascript从ES5转换为ES2015时,Babel会添加以下代码行?
var _arguments = arguments;
中断的函数,只需要一个字符串,’word’并将其连接到传入的以下参数:
concatWordsExample: word => { let wordAndFirstArg = word + arguments ? arguments[0] : ''; }
concatWordsExample('firstword ','secondword'); // I expected wordAndFirstArg to be 'firstword secondword';
我通过Grunt使用Babel v6.0.0
解决方法
这里的问题是我在我的例子中的ArrowFunction中使用了’arguments'(ES5语法):
concatWordsExample: word => { let wordAndFirstArg = word + arguments ? arguments[0] : ''; }
在这种情况下,参数没有引用箭头函数的参数,这就是我想要的 – “任何对参数,超或箭头函数的引用都被解析为它们在词法封闭函数中的绑定.”
因此,我可以重写一个传统的函数,虽然更好的解决方案是简单地使用新的“rest arguments”ES2015语法,例如:
concatWordsExample: (word,...args) => { let wordAndFirstArg = word + args ? args[0] : ''; }
这是巴别塔的官方模糊:
“在ArrowFunction中对arguments,super或this的任何引用都被解析为它们在词法封闭函数中的绑定.即使ArrowFunction可能包含对super的引用,在步骤4中创建的函数对象也不会通过执行MakeMethod而成为方法引用super的ArrowFunction总是包含在非ArrowFunction中,并且可以通过ArrowFunction的函数对象捕获的作用域访问实现super的必要状态.