Babel转换器重新分配_arguments的论据

Oli*_*i C 7 ecmascript-6 babeljs

为什么在将我的javascript从ES5转换为ES2015时,Babel会添加以下代码行?

var _arguments = arguments;
Run Code Online (Sandbox Code Playgroud)

这一行打破了我的代码中引用参数的功能......任何想法?

中断的函数,只需要一个字符串,'word'并将其连接到传入的以下参数:

concatWordsExample: word => {
   let wordAndFirstArg = word + arguments ? arguments[0] : '';
}
Run Code Online (Sandbox Code Playgroud)

函数调用示例:

concatWordsExample('firstword ', 'secondword');
// I expected wordAndFirstArg to be 'firstword secondword'; 
Run Code Online (Sandbox Code Playgroud)

我通过Grunt使用Babel v6.0.0

Oli*_*i C 10

这里的问题是我在我的例子中使用ArrowFunction中的'arguments'(ES5语法):

concatWordsExample: word => {
   let wordAndFirstArg = word + arguments ? arguments[0] : '';
}
Run Code Online (Sandbox Code Playgroud)

这种情况下的参数没有引用箭头函数的参数,这就是我想要的 - "任何对参数的引用,超,或者在ArrowFunction中的这些参数都被解析为它们在词法封闭函数中的绑定." 因此,我可以重写一个传统的函数,虽然更好的解决方案是简单地使用新的"rest arguments"ES2015语法,例如:

concatWordsExample: (word, ...args) => {
   let wordAndFirstArg = word + args ? args[0] : '';
}
Run Code Online (Sandbox Code Playgroud)

这是巴别塔的官方模糊:

"在ArrowFunction中对arguments,super或this的任何引用都被解析为它们在词法封闭函数中的绑定.即使ArrowFunction可能包含对super的引用,在步骤4中创建的函数对象也不会通过执行MakeMethod而成为方法引用super 的ArrowFunction总是包含在非ArrowFunction中,并且可以通过ArrowFunction的函数对象捕获的作用域访问实现super的必要状态.