在全局执行,要看他的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
这个对象,成功;作用域