預編譯那點事

2021-10-07 03:28:45 字數 975 閱讀 4444

js在執行時會依次進行三步工作。

首先看一段**

var a = 3;

console.log(a);

假設**只有這兩行,那麼他是怎麼進行解析的呢?

首先建立全域性物件go(global object)

將變數的值以屬性值掛載到物件上,但是此時值為undeifind(此動作發生在**執行前一刻)

編譯完成開始執行**賦值

此時上邊兩行**,正常順序的話應該輸出3,但是如果顛倒順序,由於預編譯,他的值為undefind。所以在賦值前輸出,結果應為undefind。

其實函式的預編譯和var相似,在函式執行前一刻進行編譯

建立ao (activstion object)[執行期上下文] --ao{}物件

找形參和變數宣告,將這二者作為屬性名,值為underfind

將實參形參統一

找函式宣告,值賦予函式體

還是通過**來看看具體步驟吧

function

fn(a)

console.

log(a)

;// funtion 2.找形參和變數宣告,將這二者作為屬性名,值為underfind

ao3.將實參形參統一

functiona(

);ao console.

log(a)

;123

4.找函式宣告,值賦予函式體

varb=

function()

;ao; d:

function

}} 預編譯完成,開始執行函式

fn

需要注意的是:任何變數如果未經宣告就賦值,宣告的變數也為全域性所有。windows就是全域性的域。

編譯和鏈結那點事《上》

有位學弟想讓我說說編譯和鏈結的簡單過程,我覺得幾句話簡單說的話也沒什麼意思,索性寫篇博文稍微詳細的解釋一下吧。其實詳細的流程在經典的 linkers and loaders 和 深入理解計算機系統 中均有描述,也有國產的諸如 程式設計師的自我修養 鏈結 裝載與庫 等大牛著作。不過,我想大家恐怕很難有...

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

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

學習那點事

這一周快過去了,回顧這一周,學到的,講到的東西,都很多,其實作為一名程式設計師,是不應該怕累的,雖然很累,學無止境,每天都要更新自己的知識,才能成為一名合格的程式設計師。我一直很想成為一名優秀的程式設計師,從剛開始的無知,經過很盲目,到現在明白了自己要學的是什麼,要怎樣學,這是乙個很艱難的過程,自己...