1.爲函數參數指定默認值
function fn(a,b){
//如果這樣設置默認值
a = a || 10;
b = b || 20;
console.log(a,b);
}
fn(0,10);// 10 10
//es6 中
function fn1(a = 10,b=20){
console.log(a,b);
}
fn1();//10 20
fn1(0,10);//0 10
2.Rest參數
Rest參數接收函數的多餘參數,組成一個數組,放在形參的最後
就不需要arguments對象了
function sum(){
var arg = arguments;
var res = 0;
for(var i = 0;i<arg.length;i++){
res+=arg[i];
}
}
//寫成rest參數形式
function sum1(...arr){
var res = 0;
for(var i = 0;i<arr.lenth;i++){
res+=arr[i];
}
}
function sum1(a,...arr){//rest前面可以寫參數,但是後面就不行了
//body...
}
function sum1(a,...arr,b){//報錯
//body...
}
3.箭頭函數
const a = a => a;
//相當於
const a = function (a){
renturn a;
}
//如果要兩個參數
const a = (a,b) => a + b;
const a = function (a,b){
renturn a+b;
}
//如果不是直接返回,則在代碼邏輯外要加花括號
const a = (a,b) => {
a*=2;
b*=2;
return a+b;
}
//如果箭頭函數的返回值是一個對象的時候
const a = (a,b) => ({a,b})
var arr = [3,4,1,3,9];
arr.sort((a,b) => a-b)
- 箭頭函數體內沒有自己的this對象,所以在使用的時候,內部的this就是定義時所在環境的對象。而不是使用時所在的環境。
function fn(){
setTimeout(function(){
console.log(this);
},1000);
setTimeout(()=>{
console.log(this);
},1000);
}
var obj = {a:1};
fn.call(obj);
// 打印 window
// 打印 obj
- 不能給箭頭函數使用call apply bind 去改變內部的this指向
- 體內也沒有arguments對象,可以用rest參數的形式去代替
- 不能當作構造函數去使用
- 不能當作Generator函數