微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

为什么在将我的 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.jb51.cc/js/158249.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐