除箭頭函式外函式的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...