要想知道二者有何不同,先了解一下这二者
rest参数
剩余参数的产生
正常情况下,我们写一个函数,他的 形参 和 实参 是一一对应的,就比如
function myfun(p1,p2){ //形参就是a和b
return p1 + p2;
}
myfun(1,2); //实参就是1和2
那如果说,传递的实参个数大于形参呢?
function myfun(p1,p2){
return p1 + p2;
}
myfun(1,2,3,4);
这个函数调用的时候传递了4个参数进去,但是声明函数的时候只定义了两个形参 p1 和 p2,很明显,剩余的两个参数 就接收不到,被忽略掉了
所以,这就涉及到剩余参数收集的问题了。
rest 参数是一种语法,它允许我们将不定数量的参数表示为一个数组。在平常的开的中,特别是函数定义时,经常会遇到数量不确定的参数,这个时候我们可以使用三个点... 变量 来表示 rest 参数,那些暂时不确定的参数就会被收集到一个数组中。
举个例子
这就大大方便了我们收集剩余参数,而且这是一个数组,所以它就拥有数组的种种方法
arguments
arguments 是 js 中的一个特殊对象,它包含了函数调用时传递的所有参数(获取的是“实参”) 。
arguments 对象可以在函数内部使用,用于访问函数的参数。它是一个类数组对象,可以通过下标访问每个参数。
如图所示,arguments[0] 表示第一个参数,arguments[1] 表示第二个参数,以此类推。arguments 对象还有一个 length 属性,表示传递给函数的参数个数。
需要注意的是,arguments 对象只在函数内部有效,函数外部无法访问,而且既然是 伪数组 ,也可以 通过下标访问元素 ,但并不是真正的数组对象,因此不能使用数组的所有方法。
区别
rest参数是用来收集剩余参数的,arguments包含了函数调用时传递的所有参数rest参数是真.数组,arguments是 伪数组 ,能通过下标访问元素,但不能使用数组的方法
常见的伪数组
js 中 常见的伪数组除了 arguments 对象、DOM 元素集合、NodeList 对象等
伪数组变为真数组
伪数组是不能使用数组的方法的,有时候就很难受,那有没有办法可以将伪数组转变为真数组呢?
有的
-
Array.from():function fun(n1, n2, ...numbers) { return Array.from(arguments); } const arr = fun('张三', '李四', 1, 2, 3, 4); arr.push(666); -
展开运算符
...function fun(n1, n2, ...numbers) { return [...arguments]; } const arr = fun('张三', '李四', 1, 2, 3, 4); arr.push(666)
拓展
- 实参: 调用函数,传入的实际参数
- 形参: 声明函数,占位用的参数