ECMAscript6快速入門-函數的擴展

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函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章