ecmascript-6 – Babel转换器正在重新分配_arguments的论据

前端之家收集整理的这篇文章主要介绍了ecmascript-6 – Babel转换器正在重新分配_arguments的论据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
为什么在将我的 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的必要状态.

原文链接:https://www.f2er.com/js/158249.html

猜你在找的JavaScript相关文章