1. 程式人生 > >談談你對閉包的理解

談談你對閉包的理解

function a(){
	var i=0;
	function b(){
		console.log(i++)
	}
	return b;
}
var c=a();//這裡執行了函式a,返回函式b,因此c為函式b
c();//0,這裡呼叫了函式b
c();//1,因為i仍然儲存在a中,而函式b保持著對i的引用,因此i在記憶體中的棧去依然保留

使用閉包主要是為了設計私有的方法和變數。閉包的優點是可以避免全域性變數的汙染,缺點是閉包會常駐記憶體,會增大記憶體使用量,使用不當很容易造成記憶體洩露。在js中,函式即閉包,只有函式才會產生作用域的概念。

特性:

1)函式巢狀函式;

2)函式內部可以使用外部的引數和變數;

3)引數和變數不會被垃圾回收機制回收。