閉包的定義、優點、缺點

閉包定義

在一個函數內部創建另一個函數,通過另一個函數訪問這個函數的局部變量。即能夠讀取其它函數內部變量的函數。

閉包實例

//  有如下函數:
//  sum(2,3)   //結果是5
//  sum(2)(3)  //結果是5
//  請寫出sum函數的具體怎麼實現			
function sum(i) {
	if(arguments.length == 2) {
		return(arguments[0] + arguments[1]);
	} 
	else {
		return function sum1(j) {
			return i + j;
		}
	}
}
console.log(sum(2, 3));
console.log(sum(2)(3));

注意
函數帶()纔是執行函數,纔會被調用,單純

var fun = function() {
  alert("hello world");
}

是不會彈窗的,只有調用fun()纔會彈窗。

閉包的優勢

1、能夠讀取函數內部的變量
2、閉包使用的局部變量會一直存在於內存中,不會在調用結束後,被垃圾回收機制回收

閉包的劣勢

1、由於閉包會使函數中的變量保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題。
解決辦法是,退出函數之前,將不使用的局部變量刪除。

利用閉包實現局部變量的累加

由於
1.調用函數時,爲局部變量開闢內存;函數調用結束時,局部變量內存立刻被釋放掉。
2. 全局變量是公共的,容易發生問題。
但閉包使用的局部變量不會被立刻釋放掉,會在內存中駐留一段時間,很好的解決了a,b。
變量累加舉例:

function add () {
	var age=10;
	return function(){
		age++;
		return age;
	}
}
var fun=add();
console.log(fun());  //11
console.log(fun());  //12
console.log(fun());  //13
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章