在全局執行,要看他的this是什麼bash
箭頭函數中的 this 是上級做用域中的 this this 函數的執行主體 1. 事件綁定中的this 都是 當前操做的元素; 2. 自執行函數中的this 是 window 3. 通常函數執行時,內部this指向 看點,點前邊是誰 this就是誰;閉包
箭頭函數中的this 它和普通函數最不同的一點就是 this
的指向了,做爲對象的方法調)咱們使用閉包來解決 this
的指向問題嗎,若是用上了箭頭函數就能夠更完美的解決了:函數
var obj = {
name: 'qiutc',
foo: function() {
console.log(this);
},
foo2: function() {
console.log(this);
setTimeout(() => {
console.log(this); // Object {name: "qiutc"}
}, 1000);
}
}
obj.foo2();
複製代碼
能夠看到,在 setTimeout
執行的函數中,本應該打印出在 Window
,可是在這裏 this
卻指向了 obj
,緣由就在於,給 setTimeout
傳入的函數(參數)是一個箭頭函數:ui
函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。this
根據例子咱們理解一下這句話:spa
在 obj.foo2()
執行的時候,當前的 this
指向 obj
;在執行 setTimeout
時候,咱們先是定義了一個匿名的箭頭函數,關鍵點就在這,箭頭函數內的 this
執行定義時所在的對象,就是指向定義這個箭頭函數時做用域內的 this
,也就是 obj.foo2
中的 this
,即 obj
;因此在執行箭頭函數的時候,它的 this
-> obj.foo2 中的 this
-> obj
;code
簡單來講, 箭頭函數中的 this 只和定義它時候的做用域的 this 有關,而與在哪裏以及如何調用它無關,同時它的 this 指向是不可改變的。對象
爲一個普通函數指定 this事件
var obj = {
name: 'qiutc'
};
function foo() {
console.log(this);
}
foo.call(obj);
// Object {name: "qiutc"}
複製代碼
能夠看到,在執行 foo.call(obj)
的時候,函數內的 this
指向了 obj
這個對象,成功;作用域