[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()());
```