執行環境、作用域鏈

•執行環境(executioncontext)是javascript中最爲重要的一個概念。執行環境定義了變量或函數有權訪問的其他數據,決定了它們各自的行爲。每一個執行環境都有一個與之關聯的變量對象,環境中定義的所有變量和函數都保存在這個對象中。雖然我們的代碼無法訪問這個對象,但是解析器在處理數據時會在後臺執行它。


•全局執行環境是最外圍的一個執行環境。根據ECMScript實現所在的宿主環境不同,表示執行環境的對象也不一樣。


•每一個函數都有自己的執行環境。當執行流進一個函數時,函數的環境就會被推入一個環境棧中。而在函數執行之後,棧將其環境彈出,把控制權返還給之前的執行環境。當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈(scopechain)。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。

//1 執行環境 window對象(最上層的執行環境)

			var color1 = "blue";
			function changeColor(){ // 每一個函數 都有一個執行環境 (variable obj)
				var color2 = "red";
				function swapColor(){		// 這個函數 又產生了一個執行環境 (variable obj)

					// c3 3級作用域  c2 2級作用域 c1 1級作用域
					var color3 = color2;
					color2 = color1;
					color1 = color3;
					//這裏可以訪問:color1、2、3
				}

				//這裏可以訪問color1、color2、但不能訪問color3
				console.log(swapColor());
			}
			//這裏只能訪問color1
			console.log(changeColor());	 // 作用域 window  第一個作用環境

			// 環境變量 可以一層一層的向上進行追溯 可以訪問它的上級 環境(變量和函數)
			// 一層一層的像上追溯
發佈了151 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章