平時用this有些混亂,因此寫個總結。前端
沒有箭頭函數以前,咱們說this就是函數運行時所在的環境對象,可是在箭頭函數中this就是定義時所在的對象,先說你們熟知的:函數運行時所在的環境對象。app
一、做爲函數調用,this指向全局對象函數
二、做爲對象的方法調用,該對象即爲調用上下文,this指向該對象。學習
三、做爲構造函數調用,構造函數試圖初始化這個新建立的對象,並將這個對象做爲其調用上下文,this 指向這個新建立的對象。this
四、經過函數的call/apply方法間接調用, call/apply方法的第一個參數是調用上下文,在函數體內,經過this得到對它的引用。spa
箭頭函數中this對象就是定義時所在的做用域,也就是說箭頭函數自己沒有this,內部的this就是外層代碼塊做用域中的this。對象
5、獨立函數blog
該箭頭函數在全局環境中定義,即this指向window教程
6、對象的方法作用域
如上所示,foo在全局中定義,因此this指向window,那麼如何使this指向obj?
根據上一篇介紹,當函數做爲對象的方法調用時this指向該對象,能夠這樣改寫:
func在foo調用時定義,此時的foo所在做用域爲obj,所以this指向obj
7、構造函數,因箭頭函數沒有this,固不能用做構造函數,不然會報錯
8、bind/call
如上:func定義在全局,所以打印0,同對象方法,咱們能夠經過以下改寫,打印出1
更多前端開發乾貨
免費獲取【30G從入門到精通前端學習文檔】
免費獲取【50本前端系列電子書教程】
或:關注、轉發、私信回覆「1」便可獲取免費下載地址
或:添加錘子我的QQ:990179203