1. 程式人生 > 其它 >js高階_執行上下文

js高階_執行上下文

1、程式碼分類(位置)

全域性程式碼
函式(區域性)程式碼

2、全域性執行上下文

①在執行全域性程式碼前將window確定為全域性執行上下文物件

②對全域性資料進行預處理
*var定義的全域性變數 = =>undefind,新增為window的屬性。
*function宣告的全域性函式 = =>賦值(fun),新增為window的方法。
*this = =>賦值(window)。

③開始執行全域性程式碼

全域性執行上下文  物件
console.log(a1);//相當於從全域性上下文window裡找a1,也就是window.a1
var a1=3;

a2();//相當於從全域性上下文window裡找a2,也就是window.a2();

function a2(){
    	console.log(555);
}

3、函式執行上下文

①在呼叫函式,準備執行函式體之前,建立對應的函式執行上下文物件(該物件是臨時的,虛擬的,放在棧裡的,在函式被呼叫時才建立,是棧單獨給它劃了一小塊封閉的空間,這個空間就稱為物件,只不過這個物件是存著棧的,而且裡面存的是函式的形參,區域性變數,引數列表等,外部是無法訪問這個區域的資料的,而且函式呼叫完畢,該區域自動清除消失)。

②對區域性資料進行預處理
*形參變數= =>賦值(實參)= =>新增為函式執行上下文物件
*arguments= =>賦值(引數列表),新增為函式執行上下文物件的屬性。
*var定義的區域性變數= =>undefind,新增為函式執行上下文物件的屬性。
*function宣告的函式= =>賦值(fun),新增為函式執行上下文物件的方法。
*this= =>賦值(呼叫函式的物件)

③開始執行函式體程式碼

 function fn(a1){
    	
    	//函式這裡能訪問的有
    	console.log(a1);
    	console.log(a2);
    	a3();
    	console.log(this);
    	console.log(arguments);//偽陣列
    	
    	var a2=3;
    	
    	function a3(){
    		console.log(555)
    	}
    	
    }
    
    
    fn(2,3)