看了学习Javascript闭包-阮一峰这篇文章后感觉闭包并不是想象中的那么难,正好文章最后有练习题,拿过来分析一下。感谢阮一峰老师。

代码1

var name = "The Window";
var object = {
	name : "My Object",
	getNameFunc : function(){
		return function(){
			return this.name;
		};
	}
};
alert(object.getNameFunc()());

拆分一下:

alert(object.getNameFunc());等同于

var name = "The Window"
alert(function(){
	return this.name;
})

因为在window对象下面,所以this指向是window,最后弹出 "The Window"。

代码2

var name = "The Window";
var object = {
	name : "My Object",
	getNameFunc : function(){
        var that = this;
		return function(){
			return that.name;
		};
	}
};
alert(object.getNameFunc()());

拆分一下:

alert(object.getNameFunc);等同于

alert(function (){
    var that = this; // this指向object
    return function(){
        return that.name;
    }
})

this指向的是object,赋值给了that,所以that.name最后弹出 "My Object"。

闭包主要用处:1.获取函数内部的变量;2.让局部变量的值保存在内存当中;
如果一个函数中返回的一个函数,并且返回的函数中还引用了父级函数的变量,那这个就是闭包。

个人笔记