Skip to content

我们先来考虑 arguments 这个东西到底有什么用,实际上,arguments 最大的用处就是在我参数数量不确定的时候,arguments 可以获取到所有参数列表,比如像 console.log 这种就是参数数量不确定的函数,传多少个参数都没问题,如果我们要实现这样的效果,在以前,我们就要使用 arguments 来拿到所有参数。

但是 arguments 其实是有一些缺陷的,首先 arguments 和形参是一一映射的,修改了一个会影响到另一个,这其实是不好的,如果我们把 arguments 和形参混合使用很容易导致混乱。并且从语义上来说,使用 arguments 获取参数是不用写形参的,所以形参就缺失了,我们就没办法从函数的定义上理解函数的真实意图,严重降低了代码可读性,这个是最致命的问题。

但是在 ES 6 之前,没有 arguments 就无法实习这些功能,也就不得不使用 arguments。于是,在 ES 6 就提出了剩余参数来解决这个问题。剩余参数专门用于收集末尾的所有参数,将其放置到一个形参数组中,我们只需要在形参前面加上三个点,这个形参就可以变成一个数组,收集掉所有剩余参数。

js
function sum(...args){
	return args.reduce(function(result,b){
		return result+b;
	});
}
console.log(sum(1,2,3,4));
console.log(sum(4523,5346));

此时 args 参数前面加上了...,这个就是一个数组,可以将所有剩余参数全部收集起来,哪怕不传递参数,也是一个空数组。注意,这个是一个真数组。

注意,收集的仅仅是剩余参数

js
function test(a,b,...args){
	console.log(args);//[3,4,5]
}
test(1,2,3,4,5);

前面两个参数分别被 a 和 b 收集了,args 数组收集到的只是后面剩余的参数。

很显然,剩余参数会把后面所有的参数收集到一个数组中,所以一个函数只能有一个剩余参数,并且在任何情况下,剩余参数都应该是函数的最后一个参数。

有了剩余参数之后,我们可以直接放弃 arguments 这个东西

以笔记为镜,可以知得失