箭頭函數和普通函數的this指向


對於this的指向問題還是有點不太清除,這里做一下整理,方便以后查看

普通函數的this

1.普通函數的this指向的是它的調用者,誰調用這個this,,this就指向誰,比如obj,fn,這里fn最外層的this就指向obj

2.如果沒有調用者,那這個this就指向window

3.在嚴格模式下(設置“use strict”),this為undefined

4.我們可以使用call,apply,bind(ES5新增)去改變普通函數的this指向

注釋:

1.call方法第一個參數是要改變的this指向,后面傳入的是一個參數列表。當第一個參數為null或undefined的時候,默認指向window,比如test.call(this,"one","two","three")

2.applyf方法接收兩個參數,第一個參數和call一樣,是this的指向,第二個參數一般是一個數組,當第一個參數為null或undefined的時候,默認指向window,比如:test.apply(this,["one","two","three"])

3.bind方法和call方法類似,第一個參數都是this的指向,從第二個參數開始接收參數列表。區別在於call和apply會改變this指向,然后執行函數,bind改變this的指向后,返回一個綁定的新的this函數。

箭頭函數的this

1.箭頭函數是ES6新增的,通俗的講,它指向的是外層的this,如果外層仍為箭頭函數,則再指向外層,也就是說箭頭函數的this指向箭頭函數外面第一個不是箭頭函數的那個函數的this。

2.call,apply,bind等方法也不能改變箭頭函數this的指向

下面是實例:

1.

 xixi是全局函數,普通函數沒有人調用this的時候,指向window

 

2.

 

 

 

 使用了嚴格模式后this為undefined

 3.

 

 

 

 第一個this指向obj,而setTimeout里面的匿名函數沒有直接調用者,this指向window

4.

 如果我把setTimeout里面的普通函數,改成箭頭函數,里面的this就指向它外層的this,就是obj


免責聲明!

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



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