js解析與執行過程
阿新 • • 發佈:2018-10-31
js解析與執行過程分為全域性與區域性
1:全域性,預處理階段===>執行階段
2.區域性(函式),預處理階段===>執行階段
全域性:預處理
全域性的詞法環境===window{
a:undefined
b:對函式的一個引用
}
在全域性下找到:
用var定義的變數 eg:var a=5
用宣告方式建立的函式 eg:function b(){} ,加入到全域性的詞法環境中
console.log(a); //undefined console.log(b); //報錯 console.log(c); //函式體 console.log(d); //undefined var a=2; b=1; function c(){alert(11)} var d=function(){} f(); //彈出fff g(); //報錯 function f(){alert('fffff')}; var g=function(){alert('ggg')}; //函式表示式
預處理階段先掃描函式聲明後掃描用var的變數宣告
//處理函式宣告有衝突會覆蓋
a(); //function a(){alert(222)};
function a(){alert(111)};
function a(){alert(222)};
處理變數宣告有衝突會忽略
a(); //function a(){alert(111)};
function a(){alert(111)};
var a=11111;
執行階段:從上到下執行,碰到全域性詞法下有的覆蓋其值,沒有的則加入全域性詞法
區域性(函式)預處理:
每呼叫一次產生一個詞法環境
先函式的引數
內部宣告式函式
內部var變數
衝突情況與全域性處理一樣
如果沒有用var宣告的變數,會變成最外部詞法環境的成員