如何阻止BabelJS将arguments关键字转换为全局变量?
解决Babel转译箭头函数中
arguments导致的问题 首先得明确一个关键:ES6箭头函数本身就不绑定arguments对象,你在箭头函数里直接用arguments其实是不符合规范的写法——它会试图引用外层作用域的arguments(如果有的话),如果外层也没有,就会变成全局变量,这就是Babel转译出var arguments = arguments;这种报错代码的原因。
下面给你两个靠谱的解决办法,比去折腾Babel配置要更合理:
改用普通函数:如果你的逻辑需要依赖
arguments,直接把箭头函数换成普通函数即可。普通函数天然绑定arguments对象,Babel转译后会正常处理:function myFunction() { someOtherFunction(...arguments); } myFunction('one', 'two', 3, {number: 4});使用ES6剩余参数替代
arguments:如果坚持要用箭头函数,用剩余参数语法(...args)来接收所有传入的参数,这是ES6推荐的写法,代码更清晰,也不会有转译问题:const myFunction = (...args) => { someOtherFunction(...args); } myFunction('one', 'two', 3, {number: 4});
至于你问的「是否可通过配置或特殊注释阻止该行为」——其实不推荐这么做,因为你原本的代码写法就不符合ES6规范,Babel的转译异常是因为它在试图兼容这种不规范的用法。硬要配置的话,也没有直接对应的开关能让Babel正确处理箭头函数里的arguments,反而不如修正代码来得稳妥。
内容的提问来源于stack exchange,提问作者Jos
相关产品推荐
相关产品推荐

