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) }
好了,以上就是個人在學習箭頭函數時總結的,大神輕噴 *(੭*ˊᵕˋ)੭*