关于闭包的一些小心得
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());//The Window
object.getNameFunc()()
首先执行的是
object.getNameFunc() //一个括号
返回的是
function(){
return function(){
return this.name;
};
再执行的是
object.getNameFunc()() //两个括号
也就是
(function(){
return function(){
return this.name;
})();
在上面这个函数里,
this.name 在他的函数体里是找不到具体对象的
因此 this会指向window 。
在函数里使用,this指向函数对象本身
匿名函数执行环境具有全局性,全局性的this指向window。
那么在这里 this.name会在全局变量里找
var name = "The Window";
实际的意思是 给window 对象 加了一个name属性
所以 this.name == window.name == "The Window";
如果想返回My Object
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this ; //把this赋值给that这个变量 保存到这个函数里 (getNameFunc )
return function(){
return that.name; //在这里使用
};
}
};
alert(object.getNameFunc()()); //My Object
共同学习,写下你的评论
评论加载中...
作者其他优质文章