var name= 1;
var MyObj = {
name: 2,
showName: function(){ console.log(this.name);
}
}
setTimeout(MyObj.showName,1000)
这里输出的是 1,因为这段代码在编译的时候,执行上下文中的 this 会被设置为全局 window,如果是严格模式,会被设置为 undefined。
但当我使用箭头函数时,
setTimeout(() => { MyObj.showName() }, 1000);
可以正常输出2,但箭头函数不是不改变this指向的吗?
先要明确一点:
MyObj.showName()
和MyObj.showName
是不一样的。举个例子:a 是调用了方法,然后存储了返回值
b 是直接存储了方法
然后在明确一下,this 的指向:
()=>
箭头函数情况下,指向定义时的 this那么回到原始的问题:
MyObj.showName()
调用对象就是 MyObjb = MyObj.showName;b()
调用对象可以理解为 window