参数增强:
1.参数默认值
即使调用函数时没有传入实参值,对应的形参变量也有默认值可用
function 函数名(形参1=值1,形参2=值2,…){…}
a.如果调用函数时,形参变量对应的位置传入了用户自定义的实参值,则优先使用用户自定义的实参值
b.如果调用函数时,形参变量对应的位置没有传入实参值,则启用默认值
局限:只能解决结尾几个形参变量有没有实参值的情况,无法解决中间或开头形参变量的缺少
2.剩余参数
专门代替arguments来解决不确定实参值个数的问题
今后:只要一个函数调用时不确定传入几个实参值时,都用剩余参数语法代替arguments
arguments的问题:
a.不是纯正的数组类型,无法使用数组家的函数
b.arguments只能获得全部实参值,不能有选择的获得全部实参值
c.es6箭头函数禁止使用arguments
如何:
定义函数时:…会自动收集除前几个形参变量外剩余的所有实参值
function 函数名(形参1,形参2,…自定义函数名){
收集的所有实参值,会自动放在自定义数组中
}
强调:
es6语法规定,…必须放在形参列表的结尾
优点:
a. es6箭头函数中允许使用…arr
b. …arr是纯正的数组类型,可以使用数组家的函数
c. …arr可以有选择的获取除之前的形参之外剩余的所有实参值
var add=(...arr)=>arr.reduce( (box,elem)=>box+elem,0 )
console.log(add(1,2,3));//6
function jisuan(ename,...arr){
var sum=arr.reduce((box,elem)=>box+elem,0)
}
jisuan("lilei",100,200,300);
jisuan("hmm",900,800,700);
3.打散数组
专门将一个数组或对象整体打散为多个值,再使用
调用函数时,函数名(...数组名)
总结:
定义函数时,...表示收集,调用函数时,...表示打散!
原理:
先把数组打散为多个值,再将多个值一次分别传给函数的形参变量
var arr=[1,3,5,7];
console.log(Math.max(...arr));
console.log(Math.min(...arr));
关于语法糖:
a.复制一个数组,var arr2=[...arr1];
b.拼接两个数组以及其他元素 var arr3=[元素1,...arr1,元素2,...arr2];
c.复制一个对象 var obj2={...obj1};
d.拼接多个对象以及属性 var obj3={属性1,...obj1,属性2,...obj2}