js高階_執行上下文
阿新 • • 發佈:2022-03-13
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)