1渡嚣、在全局作用域下, this指向的是window對象
2肥印、在普通函數(shù)作用域下
在非嚴格模式下识椰,this的指向依舊是window對象
在嚴格模式下,this的指向是undefined
3深碱、構(gòu)造函數(shù)調(diào)用腹鹉, this 指向是實例對象
4、對象方法調(diào)用敷硅,this 指向該方法所屬的對象
5功咒、通過事件綁定的方法, this 指向綁定事件的對象
6绞蹦、在定時器函數(shù)下力奋, this 指向 window
7、更改this指向的三個方法
我們知道在普通函數(shù)里this指向window幽七,下面提供三種方法改變this的指向景殷,分別為:call()、apply()澡屡、bind()
差別:
call 猿挚、bind 、 apply 這三個函數(shù)的第一個參數(shù)都是 this 的指向?qū)ο蟆?/p>
call和bind 的參數(shù)是直接放進去的驶鹉,第二第三第 n 個參數(shù)全都用逗號分隔绩蜻。apply 的所有參數(shù)都必須放在一個數(shù)組里面?zhèn)鬟M去。
bind 返回的是一個新的函數(shù)室埋,你必須調(diào)用它才會被執(zhí)行办绝,所以多了一個括號踏兜。
8、改變this指向的第四種方法
除了上面所說的三種方法外八秃,還有一種方法可以使this的指向變得不一樣碱妆,那就是箭頭函數(shù)。
x => x*x
箭頭函數(shù)看上去是匿名函數(shù)的一種簡寫昔驱,但實際上疹尾,箭頭函數(shù)和匿名函數(shù)有個明顯的區(qū)別:箭頭函數(shù)內(nèi)部的this是詞法作用域,由上下文確定骤肛。如下面的例子:
我們可以看出在箭頭函數(shù)fn中this的指向與變量b的指向相同纳本,我們可以理解為箭頭函數(shù)中的this繼承的是父執(zhí)行上下文里面的this,也就是說跟父級中的this指向相同腋颠。
所以繁成,箭頭函數(shù)中this指向的固定化,并不是因為箭頭函數(shù)內(nèi)部有綁定this的機制淑玫,實際原因是箭頭函數(shù)根本沒有自己的this巾腕,導(dǎo)致內(nèi)部的this就是外層代碼塊的this。正是因為它沒有this絮蒿,所以也就不能用作構(gòu)造函數(shù)尊搬。