不明白这两段代码的this指向问题

这是《你不知道js》里面的两段代码,第一段代码this是指向调用的位置的,也就是obj2。不明白为什么第二段代码this不指向obj,而是指向全局了。
functionfoo(){console.log(this.a);}
varobj2={a:42,foo:foo};
varobj1={a:2,obj2:obj2};
obj1.obj2.foo();//42
functionfoo(){console.log(this.a);}
varobj={a:2,foo:foo};
varbar=obj.foo;//函数别名!
vara="oops,global";//a是全局对象的属性
bar();//"oops,global"
MYYA
浏览 364回答 2
2回答

慕勒3428872

this总是指向调用者。第一段里面foo函数的调用者是obj2,而第二段foo函数赋值给了全局变量bar,那么调用bar函数的就是全局对象,那么this指向全局对象,故输出全局的a

慕标琳琳

与我们常见的很多语言不同,JavaScript函数中的this指向并不是在函数定义的时候确定的,而是在调用的时候确定的。换句话说,函数的调用方式决定了this指向。参考:JavaScript的this指向问题深度解析
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript