哪位大神帮我解释一下下面的代码?
1
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
2
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
第一个
alert
:返回的函数里面返回this.name
,因为后续没有引用,所以getNameFunc
直接释放了,因此这里的this
存在丢失问题,这时候直接指向了window
,于是alert的是The Window
。第二个
alert
:返回的函数里面返回that.name
,但是这里的that
在getNameFunc
有定义,因此getNameFunc
就没有被释放,然后存在在作用域中,于是可以通过作用域链向上查找that,先找到的是object
作用域,于是alert
的是My Object
。第二个
alert
体现的就是闭包的作用,能够保持作用域链的引用,可以在全局环境下访问到函数的内部作用域。