js預編譯 --預編譯詳解四部曲
預編譯
首先看一個例子
var a = 10
console.log(a); //輸出為10
console.log(a) //輸出為undefined
var a = 10
出現這種情況的原因是:js解釋型語言 ,也就是解釋一行執行一行,第一種情況是正常輸出,第二種之所以會輸出undefined 而不是報錯就是歸功於預編譯
js程式碼執行分為三步:
1,語法分析
2,預編譯
3,解釋執行
語法分析就是通篇檢查你的程式碼有沒有低階錯誤
預編譯發生在程式碼執行的前一刻
解釋執行就是執行你的程式碼
預編譯的前奏
1,imply global 暗示全域性變數 : 也就是任何沒有經過宣告的變數 此變數歸全域性(window)所有
b=123 //相當於 window.b = 123 暗示全域性變數
2,一切宣告的全域性變數 歸window所有
var a =123 //相當於 window.a = 123
預編譯的粗淺理解(這種理解可以用來解決簡單的預編譯問題):
函式宣告整體提升 和 變數,宣告提升
當問題變得複雜,只有更透徹的理解才能理清頭緒
預編譯精裝:
預編譯四部曲:
1,建立GO/AO物件 GO:global object AO:avtive object
2,找形參和變數宣告,將變數和形參名作為AO的屬性名 值為undefined
3,將實參和形參相統一(也就是吧AO物件中的形參屬性的值變成實參的值)
4,在函式體找函式宣告 賦值給函式體
全域性預編譯 生成GO === window
在全域性預編譯完成後進行全域性的程式碼解釋執行 只有在遇到函式呼叫的時候才會觸發函式區域性的預編譯
區域性預編譯生成AO
function f(a){
console.log(a) //function(){}
var a = 123
console.log(a) //123
function a(){}
var b = function(){} //function(){}
function d(){}
}
f(1)
在這個函式中進行預編譯:
1,建立AO物件 AO={ }
2;找形參和變數宣告 將變數和形參名作為AO的屬性名 值為undefined
AO={
a:undefined,
b:undefined
}
3,將實參和形參相統一
AO={
a:1,
b:undefined
}
4,在函式體找函式宣告 賦值給函式體
AO = {
a:function(){}
b:undifined
d:function(){}
}
當預編譯完成後開始執行其他程式碼
相關文章
- JS----預編譯及變數提升詳解JS編譯變數
- #ifndef預編譯編譯
- CSS預編譯器CSS編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- 對預編譯的理解編譯
- stylus(css預編譯器)CSS編譯
- JDBC預編譯語句JDBC編譯
- 關於預編譯頭 (轉)編譯
- lamp編譯詳解LAMP編譯
- 關於JSP預編譯的中文問題JS編譯
- sqlserver2005預編譯SQLServer編譯
- JavaScript的預編譯過程分析JavaScript編譯
- dll預編譯提高webpack打包速度編譯Web
- 預編譯過程(AO+GO)編譯Go
- JavaScript預編譯原理, 引擎,作用域JavaScript編譯原理
- css預編譯--sass基礎篇CSS編譯
- gcc 從語言編譯全過程 預處理---->編譯---->彙編----->連結GC編譯
- 安卓反編譯詳解安卓編譯
- EF Core預編譯模型Compiled Model編譯模型Compile
- C++ 預編譯標頭檔案C++編譯
- 編譯linux kernel預裝工具list編譯Linux
- 你真的理解javascript中的預編譯麼?JavaScript編譯
- javascript變數的宣告預編譯期間JavaScript變數編譯
- Xcode-新增pch預編譯檔案XCode編譯
- doxygen 宏定義/宏編譯/條件編譯/預處理/預編譯 不處理、忽略條件、分析所有條件、滿足所有條件的方法編譯
- Linux下nginx編譯安裝教程和編譯引數詳解LinuxNginx編譯
- Hive SQL 編譯過程詳解HiveSQL編譯
- VB6反編譯詳解編譯
- Weblogic環境下的JSP預編譯圖文說明WebJS編譯
- c++進階(一)C語言條件編譯及編譯預處理階段C++C語言編譯
- Vue 之青銅 I 晉級 [預先編譯]Vue編譯
- MySQL中普通sql與預編譯sql 區別MySql編譯
- [C++]函式與編譯預處理(一)C++函式編譯
- [C++]函式與編譯預處理(二)C++函式編譯
- CSS預編譯語言Less的用法總結CSS編譯
- [轉]:xmake編譯配置過程詳解編譯
- 詳解Linux 程式編譯過程Linux編譯
- nginx原始碼編譯安裝(詳解)Nginx原始碼編譯