1、JS中用:arguments
1)存放实参的集合,是一个类似于数组的对象,只有数组的 length,没有数组方法
function add1(a,b,c) { console.log(arguments.length) // 实参个数1个 } add1(3)
2)arguments.callee 指向函数自身,可用于递归,严格模式下已禁用
3)限制参数数量:通过arguments.length 限制传入的参数数量
4)将 arguments 转为数组
Array.prototype.slice.apply(arguments)
5)当没有形式参数时,也可以传入参数,通过arguments引用
function add1() { for(var i =0 ;i< arguments.length ; i++) { console.log(arguments[i]) // 1,2,3 } } add1(1,2,3)
6)通过实参个数模拟java,c++重载:是指允许存在多个同名方法,而这些方法的参数不同
function say () { switch(arguments.length) { case 0: return ; case 1: return ; case 2: return ; } }
2、ES6中用:reset参数
1)形式为 : “...变量名” ,该变量是一个数组
2)reset参数位置在尾参数
3)函数的length 不包括 reset参数
function add(...arg){ } add(1,2,3) 内部实现原理: function add() { for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) { arg[_key] = arguments[_key]; } }
剩余参数(只有函数的最后一个参数才可以是剩余参数) function add(num,...arg){ } // num =1 arg=[2,3] add(1,2,3)