JavaScript可变参数函数中除兼容外何时用arguments而非rest参数
排除ES6兼容性问题外,以下场景更适合使用arguments对象而非rest参数:
- 参数数量校验场景:arguments自带
length属性代表实际传入的实参数量,arguments.callee.length代表函数定义时声明的形参数量,无需手动统计形参个数就能快速完成传参数量校验。比如开发要求严格传参个数的工具函数时,直接对比两个length值即可,后续修改函数形参时也不需要同步调整校验逻辑,比rest参数更便捷。 - 匿名函数递归场景:
arguments.callee会指向当前正在执行的函数本身,不需要给匿名函数声明额外的标识符就能实现递归,非常适合立即执行函数、临时回调函数的递归场景,rest参数没有提供获取当前函数引用的能力。 - 依赖参数动态绑定的遗留逻辑场景:非严格模式下arguments对象的元素和对应位置的形参是动态绑定的,修改其中任意一个的值,另一个会同步更新。如果原有业务逻辑本身就是依赖这个特性实现的,直接用arguments比rest参数更合适,rest参数会在函数执行时就把参数拷贝为独立数组,后续形参修改不会影响rest数组的值,无法匹配原有逻辑。
- 无侵入临时调试场景:不管函数有没有声明rest参数,直接打印
arguments就能拿到所有传入的实参,不需要改动函数的参数声明新增...args,不会侵入原有代码结构,临时调试效率更高。
内容的提问来源于stack exchange,提问作者Wasbeer
相关产品推荐
相关产品推荐

