【问题标题】:How to prevent BabelJS from making global variable of 'arguments' keyword? [duplicate]如何防止 BabelJS 生成“arguments”关键字的全局变量? [复制]
【发布时间】:2018-07-11 15:01:10
【问题描述】:

在一个项目中我有这个 BabelJS 配置:

{
  "presets": ["es2016"]
}

在代码的某处,有一种方法使用标准的 JS 'arguments' 关键字来处理动态范围的参数。像这样的:

const myFunction = () => {
  // pass all arguments with spread operator
  someOtherFunction(...arguments); 
}

myFunction('one', 'two', 3, {number: 4});

到目前为止一切都很好,但是当 BabelJS 完成时,它 (1) 将“参数”定义为全局变量,并且 (2) 也以某种方式本身必然会失败:

var arguments = arguments;

有没有办法阻止 BabelJS 这样做?是通过配置还是通过一些特殊注释来做例外处理?

【问题讨论】:

  • 当你想使用arguments对象时不要使用箭头函数。

标签: javascript ecmascript-6 babeljs ecmascript-5


【解决方案1】:

不要使用神奇的arguments 变量。

(...args) => {
  // pass all arguments
  someOtherFunction(...args);
}

如果你出于某种原因必须使用 arguments 变量(提示,你几乎总是不要),你必须像在 ES5 出现之前那样使用 .apply() .

(function() {
  someOtherFunction.apply(null, arguments);
})

【讨论】:

  • 太棒了!谢谢@马达拉!
  • 是的,我不想使用“应用”,尽管这是可能的。我很高兴你的回答避免了这个问题,但我仍然想知道为什么 BabelJS 不将 'arguments' 视为它的关键字并创建一个全局变量。
  • @Jos 箭头函数没有参数 var test = ()=>console.log(arguments);test() 所以 babel 可能假设 arguments 是一个全局变量
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 2013-03-18
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多