箭頭函數的注意事項


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)
        }

 

 

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

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM