1. 程式人生 > >前端 JS基礎理論總結(八)

前端 JS基礎理論總結(八)

變數的作用域

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>變數的作用域</title>
	<script type="text/javascript">
		/*
		全域性變數:函式外部定義的變數,函式內部和外部都可以訪問,它的值可以共享

		區域性變數:函式內部定義的變數,函式內部可以訪問,外部無法訪問。函式內部訪問變數時,先在內部查詢是否有此變數,如果有,就使用內部變數,如果沒有,就去外部查詢

		函式內部如果不用'var'關鍵字定義變數,變數可能會變成全域性變數,如果用嚴格模式解析會報錯
		*/
		var a = 12;

		function aa(){
			// var a = 5;
			var b = 7;

			// alert(a);
		}

		// alert(a);
		// alert(b);//報錯

		aa();
	</script>
</head>
<body>
	
</body>
</html>

封閉函式

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>封閉函式</title>
	<script type="text/javascript">
		/*原來的寫法
		function myAlert(){
			var str = '歡迎訪問我的主頁';
			alert(str);
		}

		myAlert();*/

		var str = function(){
			alert('test');
		}
		
		//封閉函式的一般寫法
		//封閉函式定義:(function(){……})()
		/*
		;;(function(){
			var str = '歡迎訪問我的主頁';
			alert(str);
		})();//最後的()表示馬上執行
		*/

		//封閉函式其他的寫法:在匿名函式前加“!”或者“~”,之後加“()”
		~function(){
			var str = '歡迎訪問我的主頁';
			alert(str);
		}();
	</script>
</head>
<body>
	
</body>
</html>

用變數的方式定義函式

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>用變數的方式定義函式</title>
	<script type="text/javascript">
		/*
		原來的寫法:可以提前
		myAlert();

		function myAlert(){
			alert('hello!');
		}*/

		//函式用變數方式定義:先定義再使用
		// myalert();//提前會報錯
		var myAlert = function(){
			alert('hello!');
		}

		myAlert();//放在下面可以執行

	</script>
</head>
<body>
	
</body>
</html>

閉包

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>閉包</title>
	<script type="text/javascript">
		/*
		閉包的本質就是函式巢狀,就是在函式裡面定義函式,
		內部函式可以引用外部函式的引數和變數
		引數和變數不會被垃圾回收機制給回收
		閉包的用途:可以存迴圈的索引值、做私有變數計數器
		*/
		/*
		//閉包的一般寫法
		function aa(b){
			var a = 12;

			function bb(){
				alert(a);
				alert(b);
			}

			return bb;
		}

		var cc = aa(24);*/

		
		//閉包的封閉函式寫法
		var cc = (function(b){
			var a = 12;

			function bb(){
				alert(a);
				alert(b);
			}

			return bb;
		})(24);

		cc();
		

		/*
		//只能呼叫一次的閉包
		(function(b){
			var a = 12;

			function bb(){
				alert(a);
				alert(b);
			}

			return bb;
		})(24)();
		*/
	</script>
</head>
<body>
	
</body>
</html>