1. 程式人生 > >JavaScript中函式閉包的應用

JavaScript中函式閉包的應用

1. 事件閉包的理解:閉包是指有許可權訪問另一個函式作用域中的變數的函式.在 javascript 語言中,閉包就是函式和該函式作用域的組合.在JavaScript中任何一個函式都是一個閉包,但是巢狀的函式功能更強(閉包的作用更加強大,產生一個作用域鏈)
2.變數的作用域:要理解閉包,首先必須理解 Javascript 特殊的變數作用域.變數的作用域無非就是兩種:全域性變數和區域性變數.
Javascript 語言的特殊之處,就在於函式內部可以直接讀取全域性 變數.另一方面,在函式外部自然無法讀取函式內的區域性變數.
注:在函式內部宣告變數的時候,一定要使用var命令.如果不用的話,你實際上聲明瞭一個全域性變數!不如寫在函式之外.


3.如何從外部讀取區域性變數:
出於種種原因,我們有時候需要得到函式內的區域性變數.但是,前面已經說過了,正常情況下,這是辦不到的,只有通過變通方法才 能實現. 那就是在函式的內部,再定義一個函式.
父物件的所有變數,對子物件都是可見的,反之則不成立,從而形成js中特殊的作用域鏈 scope chain;
例:

<script type="text/javascript">
	function rengh(){
		var color='yellow';
		var width=200+'px';
		var height=300+'px';
		function linggh(){
			return color;
		}
		return linggh();
	}
	alert(rengh());
</script>

4.閉包的再一次理解:
閉包就是能夠讀取其他函式內部變數的函式;由於在 Javascript 語言中,只有函式內部的子函式才能讀取區域性 變數,因此可以把閉包簡單理解成“定義在一個函式內部的函式”. 所以,在本質上,閉包就是將函式內部和函式外部連線起來的一座橋樑.
5.閉包的應用:
閉包可以使用在許多地方.它的最大作用有兩處,一個是前面提到 的可以讀取函式內部的變數,另一個就是讓這些變數的值始終保持在記憶體中.
6.閉包的案例:

<script type="text/javascript">			
//	建立一個學生 物件,具備屬性     color, height,weight
	function Student(){
		var color='yellow';
		var height=1.82;
		var weight=60; //表示體種的屬性
		
		//第一種方法 不常用(不強大);
		//return '膚色:'+color+'身高:'+height+'體中:'+weight;
		//第二種方式: 通過在函式體內定義函式 返回,功能更加強大
		function Student_01(){
			return '膚色:'+color+'身高:'+height+'體中:'+weight;
		}
		return Student_01();
	}
//	對於以上案例: Student_01() 就是一個閉包函式
//	閉包就是能夠讀取其他函式內部變數的函式
	//有個老師物件 想訪問學生物件的屬性(詳細資訊)
	function Teacher(){
		alert(Student());
	}
	Teacher();
	/*閉包可以使用在許多地方.它的最大作用有兩處:
		一個是前面提到的可以讀取函式內部的變數,
		另一個就是讓這些變數的值始終保持在記憶體中*/
</script>