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的必要状态.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...