this的查找規則會逐層往上查找,最終位全局window 優先順序問題:顯式綁定(顯式綁定與new綁定沒有可比性)new綁定>隱式綁定>預設綁定 在編程中,this 是一個關鍵字,代表當前對象或者函數的執行環境。this 的指向性問題是指在不同的情況下,this 指向的對象不同,從而影響代碼的行為。 ...
優先順序問題:顯式綁定(顯式綁定與new綁定沒有可比性)new綁定>隱式綁定>預設綁定
在編程中,this 是一個關鍵字,代表當前對象或者函數的執行環境。this 的指向性問題是指在不同的情況下,this 指向的對象不同,從而影響代碼的行為。
在 JavaScript 中,this 的值可以通過四種不同的調用方式來確定其指向性:
-
作為函數調用:當 this 在普通函數中使用時,它將指向全局對象(瀏覽器中為 window,Node.js 中為 global),預設綁定。但是在嚴格模式下在獨立函數種調用this,那麼this所指向的位undefined
獨立函數:函數沒有綁定到某個對象上進行調用
-
作為方法調用:當一個函數作為對象的一個屬性被調用時,this 將會指向該對象也被叫做隱式綁定。
-
使用 call() 或 apply() 調用:這兩個方法可以改變函數的作用域(執行環境),並顯式地指定函數執行時的 this 綁定對象也被叫做顯式綁定。
apply函數在this中的使用方式apply("apply",["zhangsan",11,2]):它能夠傳遞兩個參數(第一個參數:綁定this 第二個參數:是一個數組用來傳入額外的實參)
call函數在this中的使用方式(call,("call","lisi",12,22)):它可以傳遞很多參數(第一個參數:綁定this,其餘的可以作為參數傳遞到函數中)
-
作為構造函數調用:在使用 new 關鍵字實例化一個對象時,this 將會指向新創建的對象使用new綁定。
同時需要註意的是,在箭頭函數中,this 的值與所在上下文中的一樣,即與函數定義時的this值保持一致。