var label = 2
var obj={
label:1
a:function(){
console.log(this.label);
}
}
obj.a(); //1
var b = obj.a
b(); //2
为什么b会丢失原对象this,后面的原理是什么?
================补充:嵌套函数的this指向window怎么理解?=========================
如果说函数的this,由它运行时的执行环境来决定,比如这里的obj.a(),function的执行环境是obj所以this指向obj,而b()的执行环境是window,所以this指向window;
那么嵌套函数的this指向window,这个除了说“这是JS的语法规范规定的”,怎么从JS的实现原理上理解?
var label = "windowC"
function showThis(){
var label = "innerC"
function innerFun(){
console.log(this.label)
}
innerFun()
}
showThis(); //windowC
obj.a的值,不过是存放了它代表方法的地址,当
var b = obj.a
时,b变量存放的也是该方法的地址;而另一方面,全局声明的变量,是
window
的属性,故window.b == b
是成立的;调用
b()
时,就相当于window.b()
一样。再跟obj.a()
对比,明白了吧;当然,就指向了window这个全局对象。给个赞也行哇