1. 程式人生 > >js解析與執行過程

js解析與執行過程

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宣告的變數,會變成最外部詞法環境的成員