[TOC]
[阮一峰](http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html)
## 1.闭包的理解
> 1.闭包就是能够读取其他函数内部变量的函数 f2就是闭包
> 2.由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
> 3.所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
```
function f1() {
var n = 999;
function f2() {
alert(n);
}
return f2;
}
var result = f1();
result(); // 999
```
## 2.代码对比理解闭包
```
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //当前this指向window
```
*****
```
var object = {
name: "My Object",
getNameFunc: function () {
var that = this;
用that接住了this此时this的this指 “My Object”
return function () {
return that.name;
};
}
};
alert(object.getNameFunc()());
```