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 乙個執行期上下文定義了乙個函式執行時的環境,函式每次執行時對應的執行上下文都是獨一無二的,所以多次呼叫乙個函式會導致多個執行上下文,當函式執行完畢,它所產生的執行上下...