如图所示,这里调用obj.getAge()后为什么this会指向windows/undefined,不是obj调用了它吗,this不应该是指向obj吗??
对比:像这里person。showName()的this就是指向person的啊,不是谁调用this就指向谁吗
如图所示,这里调用obj.getAge()后为什么this会指向windows/undefined,不是obj调用了它吗,this不应该是指向obj吗??
对比:像这里person。showName()的this就是指向person的啊,不是谁调用this就指向谁吗
var name = 'XL';
var person = {
name: 'xl',
showName: function() {console.info(this.name)}
}
person.showName();
// 这里showName调用位置是person上下文,所以作用的this被绑定到person上
var showNameA = person.showName;
// 这里的showNameA类似于函数别名,showNameA是person.showName的引用,showNameA调用位置依旧是window.
//this的绑定是与它调用位置有关的
var obj = {
birth: 1990,
getAge: function() {
var b = this.birth;
var fn = function() { console.info(this)}
}
return fn;
}
你的那个obj中的getAge中涉及到闭包,其实可以理解为返回一个函数fn,obj.getAge()完成后继续执行fn,此时的调用位置是在Window环境下,所以fn中的this指向window
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
因为fn是个匿名函数
举个简单例子
以上,你的
var fn=function(){};
再return fn()
本质上就是个直接调用的匿名函数闭包 return function(){}你只是将这个匿名函数赋值给fn了,并不能改变他没函数名的本质
结论:只要是匿名函数,this就指向window全局对象,例如: