天天看点

ES6——剩余参数剩余参数

剩余参数

扩展运算符:展开功能,如数组展开合并到新数组;

剩余参数:聚合功能,如把调用函数传递的参数组合成一个数组,传入------- …则叫剩余参数;

function sum(...args) {
	// let args = Array.prototype.slice.call(arguments);
	// let args = [...arguments];
	// let [...args] = arguments;
	console.log(args);
}
//二者都只能在末尾,不能在中间等其他位置;否则无法辨别,报错;
function op(type, b, ...nums) {
	console.log(type);
	console.log(nums);
}

op('sum', 1, 23, 454, 3, 67, 234);
           

.reduce方法:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce() 可以作为一个高阶函数,用于函数的 compose。

arr.reduce(function(prev,cur,index,arr){
...
}, init);
           

arr 表示原数组;

prev 表示上一次调用回调时的返回值,或者初始值 init;

cur 表示当前正在处理的数组元素;

index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;

init 表示初始值。

常用的参数只有两个:prev 和 cur。

例子:

function sum(...numbers) {
	return numbers.reduce(function(a, b) {
		return a + b;
	}, 0);
}

console.log(sum(1, 2, 3, 4));
           
/*
a则是函数的返回值prev,b则是当前正在处理的数组元素cur;
原理:由于传入了初始值0,所以开始时a的值为0,b的值为数组第一项1,相加之后返回值为1作为下一轮回调的a值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。
第一轮  a=0(init默认值0),b=1; 返回值:a=1;
第二轮:a=1,b=2, ;返回值:a=3;
第三轮:a=3  ,b=3;返回值:a=6;
第四轮:a=6,b=4-----返回值:a=10    
*/