箭頭函數的注意事項

1.箭頭函數中的this取決於函數的定義,而非調用:函數

 function a(){
        setTimeout(()=>console.log(this.age),100)
    }
    a.call({age:18})

    // function a(){
    //     setTimeout(function(){
    //         console.log(this.age)
    //     },100)
    // }
    // a.call({age:123})
兩次調用都使用了call改變函數a的this指向,註釋代碼打印結果是window,而在箭頭函數內的打印結果是調用所傳入的對象。爲啥呢?setTimeout調用了內部函數,普通函數的this指向是取決於函數的調用對象,意思也就是誰調用,那麼this 就是誰,setTimeout其實是window.setTimeout,因此註釋代碼打印結果是window;箭頭函數的this並不取決於函數的調用而是取決於函數的定義,上述代碼內的箭頭函數是在a的函數體內定義的,那麼箭頭函數的this=a的this,調用a時改變了a的this指向讓其=傳入對象,因此在箭頭函數內的打印結果是調用所傳入的對象;(感受好像有點繞  QAQ)
 
 
2.箭頭函數不能夠new,這個好理解,由於他不是構造函數,因此不能new;
 
3.箭頭函數不可使用arguments獲取參數列表,可使用rest代替:
    let name=(...rest) => {
          console.log(rest)
          //console.log(arguments)
     }
     function a(){
         console.log(arguments[0])
     }
     a(1,2,3,4,5);
     name(1,2,3,4,5,6);

在箭頭函數內使用arguments會報未定義,這裏rest是形參,能夠自定義的,這樣也是能夠的學習

let name=(...a) => {
            console.log(a)
            //console.log(arguments)
        }

 

 

好了,以上就是我的在學習箭頭函數時總結的,大神輕噴   *(੭*ˊᵕˋ)੭*this

相關文章
相關標籤/搜索