1. 程式人生 > >js學習筆記-第二章變數、作用域和記憶體問題-執行環境和作用域

js學習筆記-第二章變數、作用域和記憶體問題-執行環境和作用域

//執行環境:執行環境(execution context,為簡單起見,有時也稱為“環境”)是 JavaScript 中最為重要的一個概念。執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為
//變數物件:。每個執行環境都有一個與之關聯的變數物件(variable object),
//作用域鏈:當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈(scope chain)。作用域鏈的用途,是保證對執行環境有權訪問的所有變數和函式的有序訪問。
//全域性執行環境的變數物件始終都是作用域鏈中的最後一個物件
//最大的執行環境:window物件;當網頁關閉或瀏覽器關閉時才會被登出

		//示例
		//解析:執行環境:window、changecolor()
		//變數物件:window:color、changeColor()
		//			changeColor:無
		/*var color = "blue";

		function changeColor() {
			if(color === "blue") {
				color = "red";
			} else {
				color = "blue";
			}
		}
		changeColor();
		alert("Color is now " + color)*/
		
		
		//執行環境的型別有兩種:最大的window環境和區域性函式
		
		//延長作用域鏈 with try...catch()
		//with
		//分析:with的作用,就是簡化物件的使用,with程式碼塊的內部,首先每個變數被當做區域性變數,如果找不到該變數的定義,會找是不是該物件的屬性
		//由於with語句塊中作用域的‘變數物件’是隻讀的,所以在他本層定義的識別符號,不能儲存到本層,而是儲存到它的上一層作用域。
		//延長作用域,所以可以返回url
	/*	function bulider(){
			var qs = "?debug=true";
			with(location){
				var url=href+qs;//url屬於上一層環境的變數物件
			}
			return url;
			//相當於
			//var url=window.location.href+qs;
		}*/
		
		
		//沒有塊級作用域,只有全域性作用域和函式作用域,除全域性變數,和區域性變數,其他變數都會被當作全域性變數。
		if(true){
			var a="123";//if語句執行後,不會銷燬,會將當前變數新增到當前執行環境中
			
		}
		console.log(a);//123