参数默认值
function foo(x=2,y=5){
console.log('x :'+x,'y :'+y);
}
foo();//x :2 y :5
foo(3);//x :3 y :5
foo(3,4);//x :3 y :4
注意默认值后面不可以再有不是默认值的变量,前面可以有不是默认值的变量
function foo(x,y=5){
console.log('x :'+x,'y :'+y);
}
foo(2);//x :2 y :5
// 不可以这样写
function foo(x,y=5,z){}
剩余参数 把剩下的参数存放在数组里,剩余参数后面不能再跟参数了
function fn(m,n,...rest){
for(let i in rest){
console.log(i);//0 1 2
}
}
fn(1,2,3,4,5);
//把连续的数组转换成分散的
console.log('a',...[1,2,4]);//a 1 2 4
箭头函数 箭头函数前面是参数,箭头后面是返回值
多个或者另个参数需要带小括号
let arr=[1,2,3];
let result=arr.sort((a,b)=>b-a);
console.log(result);//[3, 2, 1]
let arrow=v=>v*3;
console.log(arrow(2));//6
let fn=(a,b)=>{
a=a*2;
b=b*2;
return a+b;
}
console.log(fn(1,2));//6
如果想要返回对象的时候,需要函数体用小括号包裹,函数体内花括号包裹返回的对象
let fn=(a,b)=>({a,b});
console.log(fn(1,2));//{a: 1, b: 2}
注意事项
1.箭头函数体内没有自己的this对象,所以在使用的时候,其体内的this就是定义时所在的环境对象,而不是使用时所在环境的对象
function fn(){
setTimeout(function(){
console.log(this);Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
},1000);
setTimeout(()=>{
console.log(this);//{a: 1}
},1500);
}
var obj={a:1};
fn.call(obj);
2.箭头函数体内没有arguments对象,如果要用,可以用rest参数代替
function fn(){
setTimeout(()=>{
console.log(arguments);//[1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
},1000);
}
fn(1,2,3);
3.不可以当做构造函数,不可以使用new命令,否则会抛出错误
const fn=(a,b)=>a+b;
const f=new fn(1,2);//会报错
4.箭头函数不能用作Generator函数