var obj = {
name: 'name',
foo: function () {
console.log(this); // Object {name: "name"}
setTimeout(function () {
console.log(this); // Window
}, 1000);
},
foo2: function () {
console.log(this); // Object {name: "name"}
setTimeout(() => {
console.log(this); // Object {name: "name"}
}, 2000);
}
}
为什么settimeout中的函数this指向window?而箭头函数this指向Object
是因为settimeout是window对象的方法还是说当做直接调用一个函数?
这个就是关于
this指向
的问题了,setTimeout中的function你可以理解为callback,这样不知道你能否理解?
setTimout中的执行
伪代码
可以理解为:可以看到,他是直接调用fn(),前面没有给任何对象绑定在一起,所以根据JavaScript的规则,它属于默认绑定,自然就是window了,不知道你能否理解?如果你想改变他得绑定对象,可以使用bind去绑定。
再说说
箭头函数
,在ES6中箭头函数的this是指向父级作用域的(不是很准确),你的foo2中使用的箭头函数,因此默认会指向obj,如果你将
这样this不会指向obj而是会指向window,
若
这样呢this会指向b,
建议去查看一下this的四种绑定机制和作用域