js在執行時會依次進行三步工作。
首先看一段**其實函式的預編譯和var相似,在函式執行前一刻進行編譯var a = 3;
console.log(a);
假設**只有這兩行,那麼他是怎麼進行解析的呢?
首先建立全域性物件go(global object)
將變數的值以屬性值掛載到物件上,但是此時值為undeifind(此動作發生在**執行前一刻)
編譯完成開始執行**賦值
此時上邊兩行**,正常順序的話應該輸出3,但是如果顛倒順序,由於預編譯,他的值為undefind。所以在賦值前輸出,結果應為undefind。
建立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...
學習那點事
這一周快過去了,回顧這一周,學到的,講到的東西,都很多,其實作為一名程式設計師,是不應該怕累的,雖然很累,學無止境,每天都要更新自己的知識,才能成為一名合格的程式設計師。我一直很想成為一名優秀的程式設計師,從剛開始的無知,經過很盲目,到現在明白了自己要學的是什麼,要怎樣學,這是乙個很艱難的過程,自己...