JavaScript的函數介紹及閉包使用

普通函數

//a爲局部變量
function f1() {
	var a = 1;
	console.log("a: " + a);
}

//a爲全局變量
var a = 1;
function f2() {
	console.log("a: " + a);
}

** 變量聲明時如果不使用 var 關鍵字,那麼它就是一個全局變量,即便它在函數內定義。**

//計數器
function count() {
	var i = 0;
	return ++i;
}
count(); //1
count(); //1
count(); //1

var i = 0;
function count() {
	return ++i;
}
count(); //1
count(); //2
count(); //3

閉包  允許訪問局部作用域之外的數據

內嵌函數(閉包),使函數擁有私有變量 i,i的賦值只會執行一次

var count = (function() {
	var i = 0; //賦值只進行一次
	var add = function() {
		i += 1;
		return i;
	};
	return add;
})();
count(); //1
count(); //2
count(); //3

!!!閉包的性能問題:

    通常來說,函數的活動對象會隨着執行環境一同銷燬,但引入閉包之後,由於引用仍存在於閉包中,所以此對象無法進行銷燬,這意味着腳本中的閉包與非閉包函數相比需要更多的內存開銷,在大型web應用中,是很大的性能問題,在IE中會導致內存泄漏。

    優化方式:在退出函數之前,將不使用的局部變量全部刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章