Javascript 閉包

在正常狀況下,函數外部沒法讀取函數內的局部變量,可是能夠在函數內部定義一個新的函數,再return這個函數來實現讀取局部變量javascript

 

在Javascript中,查找變量時會按照 「做用域鏈」的結構進行,便是會一級一級地向上尋找父函數的變量,也就是說,父函數的全部變量對子函數都是可見的,反子則不成立html

 

 

根據上頁代碼運行結果輸出的是」kevin」,執行f3至關於執行了f2函數,在f1內部造成了一個活動對象,在f1執行時,內部的name會覆蓋外部的變量的值,因此name=「kevin」java

F1執行完後會自動銷燬,但內部的f2的引用給了f3,因此name的值沒有銷燬,銷燬的是做用域鏈閉包

 

	<script type="text/javascript">
		window.onload = function(){
			var $li = document.getElementsByTagName("li");
			/*
			for (i = 0; i < $li.length; i++) {
				$li[i].onclick = (function(n){
					console.log($li[n].innerHTML);
				})(i)
			};*/			

			for (var i = 0; i < $li.length; i++) {
				$li[i].onclick = (function(n){
					return function (){
						console.log($li[n].innerHTML);
					};
				})(i)
			};		
		}

	</script>
</head>
<body>
	<ul>
		<li>廣州</li>
		<li>上海</li>
		<li>北京</li>
		<li>南京</li>
	</ul>
</body>

 

閉包簡單理解成「定義在一個函數內部的函數」,將函數內部和函數外部鏈接起來的一座橋樑。函數

相關文章
相關標籤/搜索