实例讲解js中的预编译
js作為一本腳本語言,可以不經(jīng)過編譯直接運行,但遇到預編譯的問題,尤其是變量或函數(shù)同名時,這點知識就尤其必要了。為了更好地了解js語言背后的運行機理。筆者采用實例化的方式講解我理解的預編譯。
?? 理解預編譯首先要弄清楚兩種概念:函數(shù)聲明和變量賦值。
[javascript]?view plaincopy這種形式的寫法是函數(shù)聲明,即聲明一個函數(shù),腳本在執(zhí)行之前會做預編譯處理。
[javascript]?view plaincopy
?? 這種寫法是變量賦值,函數(shù)在js語言里也是一種數(shù)據(jù),匿名函數(shù)作為變量賦值給定義的變量。這種形式在預編譯處理階段,只會給變量ledi分配一個內(nèi)存空間,不會做初始化。初始化過程中會在執(zhí)行時執(zhí)行。
???好了,弄清楚以上概念,上實例。實例參考(點擊此處)。原作者只詳細解釋了前兩個實例,而筆者看來,接著的兩個也非常重要,那么筆者就甄別出代表性來講解。
示例代碼一:
[javascript]?view plaincopy???這段代碼,首先判斷兩個都屬于函數(shù)聲明。都會在預編譯階段處理,而函數(shù)名相同,會按后定義的來定義函數(shù),在執(zhí)行階段只會看到后定義的函數(shù)結果,也就不難理解了。
示例代碼二:
[javascript]?view plaincopy? 這段代碼,首先判斷兩種都屬于變量賦值。在預編譯階段,兩個變量名一樣,分配一個內(nèi)存空間存放變量ledi內(nèi)容。當代碼執(zhí)行時,按照順序執(zhí)行和賦值,會先后得到兩種結果。
示例代碼三:
[javascript]?view plaincopy???這段代碼,首先判斷,前一種屬于函數(shù)聲明,后一種屬于變量賦值。預編譯處理完,首先執(zhí)行第二行,實際上是第一行的內(nèi)容,第三行相當于將ledi變量重新賦值即初始化,重新賦值后,第四行執(zhí)行第三行的函數(shù)。
示例代碼四:
[javascript]?view plaincopy? 以上代碼分開執(zhí)行,可驗證,函數(shù)預編譯會執(zhí)行,變量賦值則是先分配空間,執(zhí)行時再賦值。
總結
以上是生活随笔為你收集整理的实例讲解js中的预编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript运行过程中的“预编译
- 下一篇: Js作用域链及变量作用域