函式預編譯過程和案例分析

2021-09-29 13:20:05 字數 1273 閱讀 5173

1語法分析(即通篇掃瞄所有**)如果有明顯的語法錯誤 直接報錯,不執行所有的**

2預編譯

3解釋執行(邊解釋邊執行)

案例一:

function fn(a,b);

console.log(a);

var b = function(){};

console.log(b);

function c(){}; }

fn(6);

1建立ao物件,執行期上下文(後面更新關於執行期上下文詳解)。

ao
2尋找函式的形參和變數宣告,將變數和形參名作為ao物件的屬性名,值設定為undefined.

ao
3將形參和實參相統一,即更改形參後的undefined為具體的形參值。

ao
4尋找函式中的函式宣告,將函式名作為ao屬性名,值為函式體。

ao;

b:undefined

c: function c(){};

}

預編譯結束,開始執行**

function fn(a,b);

var a = 99;//重新對a賦值

console.log(a);//因此此時輸出為99

function a(){};//預編譯環節已經提出,故執行時不在看這行**

console.log(a);//因此此時輸出為99

var b = function(){};//此步驟是把function(){};賦給b

console.log(b);//輸出function(){}

function c(){};

} fn(6);

**公升級案例 :**

function f1()

f3();

}f2();

} f1();

預編譯導圖

JS預編譯 函式預編譯和全域性預編譯

預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...

預編譯的過程

圖一 圖二 預處理 在預處理階段進行的工作是純粹的替換和展開,沒有任何的計算功能和檢查功能,這也正是巨集定義出現在預處理階段的原因。下面我主要說一下巨集定義的優點和缺點 優點 1.速度方面 當巨集定義的是乙個函式時,預處理用複製巨集的 方式代表函式呼叫,省去了引數壓棧 生成組合語言的call 呼叫 ...

函式預編譯

函式預編譯 函式預編譯的步驟 1 語法分析 2 預編譯 3 解釋執行 當函式執行時,會建立乙個稱為執行期上下文的內部物件 go和ao 乙個執行期上下文定義了乙個函式執行時的環境,函式每次執行時對應的執行上下文都是獨一無二的,所以多次呼叫乙個函式會導致多個執行上下文,當函式執行完畢,它所產生的執行上下...