ES6之函數的擴大(二)

主要解說:

1. rest參數
2. 嚴厲情勢
3. name屬性 -- 返回函數的函數名
4. 箭頭函數 -- 用 "=>" 定義函數


1.rest參數

        ...arguments                      <=>           ...[...]
引入rest參數其目標是為了獵取函數的過剩參數   <=>    數組的擴大運算符...的逆向情勢
將參數數列轉為一個數組                      <=>    將一個數組轉為逗號分開的參數序列

function push(arr,...items){  //有點安能辨我是雄雌的覺得
    if(Array.isArray(items)){
        array = array.concat(items); // rest參數的狀況
    }else{
        array.push(...items);        // 數組的擴大運算的狀況
    }
}
//rest參數
push([],1,23,4,45,56)       //[1,23,4,45,56]

//數組的擴大運算
push([],...[1,23,4,45,56]); //[1,23,4,45,56]

注重:
    1.rest參數必需位於函數參數末端,且只能存在一個rest參數,不然報錯
    2.函數的length屬性不包括rest參數,就跟止步於默認值參數一樣,不確定的事變不斟酌在內
    

2.嚴厲情勢

es5中函數內部能夠設定嚴厲情勢,es6中函數參數運用了默認值、解構賦值、或許擴大運算符的話就不能設定嚴厲情勢
偽代碼:
    function doSomething(...items){
        'use strict';
        ...
    }
    //Uncaught SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
    //因為代碼中基礎沒有在函數內部運用嚴厲情勢的狀況,這個就不多了解了
    

3.name屬性 — 返回函數的函數名

function push(arr,...items){}    
    push.name;
    //"push"
    
    push.bind({}).name
    //"bound push"
    
let sayHi = function(){}
    sayHi.name
    //"sayHi"
let sayHi = function realName(){}
    sayHi.name
    //"realName"
    
let sayHell = new Function('x','y','console.log(x,y)');
    sayHell.name
    //"anonymous"
    
    sayHell.bind({}).name
    //"bound anonymous"
//僅僅曉得有這麼一個屬性,詳細用途未知


4.箭頭函數 — 用 “=>” 定義函數

let sayHi = name => name;
等價於:
let sayHi = function(name){
    return name;
}

用法:
    i.單個參數時,可直接寫參數名
    ii.0個或兩個及兩個以上參數必需加括號
        let f = () => 5;
        let f = (x,y) => x+y;
        
    iii.函數代碼塊多於一條語句,就要運用大括號括起來
        let f = (x,y) => { ...}
 

**箭頭函數除了簡化函數的寫法,特別是匿名函數.另一個主要功用就是綁定定義時地點的作用域,而非運行時動態的作用域**    
像click,setTimeout,setInterval這類運行時動態轉變作用域的,寫成箭頭函數的情勢則this依然為代碼定義處的this

//計時器一個
function Timer(){
    this.count = 0;
    
    setInterval(() => {this.count++;},1000);
}

let t = new Timer();

等價的寫法:
function Timer(){
    this.count = 0;
    
    let __that = this;
    setInterval(function(){__that.count++;},1000);
}
//嵌套的狀況,能夠以此類推.實在就是在外層作用域建立一個變量指向this,然後內層運用.每一層都邑建立該層的this指向供下一層運用.


若有bug請斧正Thanks♪(・ω・)ノ!

    原文作者:babe
    原文地址: https://segmentfault.com/a/1190000015093063
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞