JS中this的指向,箭頭函式this的指向

2021-10-17 05:19:59 字數 1248 閱讀 3137

除箭頭函式外函式的this在其執行時才被確定,指向其呼叫者。

例如

let obj =

}let fn = obj.b;

obj.b(

);//obj 2fn(

);//window undefined 等價window.fn()

第一種情況下該函式是被obj物件呼叫的,this指向obj物件

第二種情況下該函式是被window物件呼叫的,this指向window物件

例如

let obj =

}functionfn(

)obj.b(

);// obj, 2; window, undefined

當乙個函式被另乙個函式巢狀呼叫時該函式指向window物件,可以理解為只要函式是直接呼叫,其this都是指向window的(箭頭函式除外),要注意分this和變數不一樣,變數會從上一層的執行上下文繼承,而this不會。

箭頭函式的this在定義時就被確定了,箭頭函式沒有自己的 this 值,箭頭函式中所使用的 this 都是來自函式作用域鏈,箭頭函式中的this從上層作用域尋找。

functionfn(

)}let obj =}}

;//outputfn(

)();

//window, undefined

fn.(obj)()

;//obj, undefined

fn.(

)(obj)

;//window, undefined

obj.c(

)();

//obj, 10

let a =1;

let obj =

, c:}}

obj.b(

);// window, undefined

obj.c.d(

);// window, undefined

由於物件是作為物件字面量的屬性定義的,物件字面量在全域性**中定義,因此,箭頭函式內部的this值與全域性函式的this值相同

我的理解是這樣的

obj.c.d=

()=>

可以從**結構上看到箭頭函式並未被其他{}包含,所以其外層作用域中的this就是全域性的window

簡單總結為如果箭頭函式被非箭頭函包含,則this繫結指向的是最近一層非箭頭函式的this,否則,this的值會被設定為全域性物件。

箭頭函式中this的指向

箭頭函式中this的指向 在箭頭函式中沒有this,箭頭函式中的this是它捕獲過來的,注意 1.箭頭函式中的this一旦捕獲將無法在改變 2.箭頭函式是在它被宣告時開始捕獲的 3.什麼是宣告時呢?就是箭頭函式被呼叫時 4.捕獲的是離它最近的父級的this的指向 舉個栗子 var a 測試 let ...

箭頭函式中的this指向

let a a.bar undefinedbar函式中的this指向父作用域,而a物件沒有作用域,因此this不是a,列印結果為undefined function a a.prototype.bar console.log this.foo let a new a a.bar undefined原...

箭頭函式中的this指向

箭頭函式是es6新出的一種函式格式的寫法 文件對箭頭函式的解釋 箭頭函式相當於匿名函式,並且簡化了函式定義。箭頭函式有兩種格式,一種只包含乙個表示式,連和return都省略掉了。還有一種可以包含多條語句,這時候就不能省略和return 比如我們常見的foreach方法 var arr 1 2,3 4...