當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript运行过程中的“预编译阶段”和“执行阶段”
生活随笔
收集整理的這篇文章主要介紹了
javascript运行过程中的“预编译阶段”和“执行阶段”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
javascript相對于其它語言來說是一種弱類型的語言,在其它如java語言中,程序的執行需要有編譯的階段
而在javascript中也有類似的“預編譯階段”(javascript的預編譯是以代碼塊為范圍<script></script>,即每遇到一個代碼塊都會進行 ?預編譯>執行),
了解javascript引擎的執行機理,將有助于在寫js代碼過程中的思路總結
首先科普下javascript中的兩種聲明方式,var和function,前者聲明的是變量,后者聲明的是方法
在預編譯中,javascript對這兩種聲明做出了兩種處理方案
<script>var a = "1"; //聲明變量afunction b(){ //聲明方法balert();}var c = function(){ //聲明變量calert();}</script>?
以上代碼塊中,a、c為變量賦值,b為函數聲明,當執行以上的代碼時,
首先會進入預編譯階段,
對與變量賦值a、c會在內存中開辟一塊內存空間并指向變量名,且賦值為undefined
對于函數聲明,則同樣會進行開辟內存空間,但此時會直接將函數體進行處理,即用函數聲明方式,則在預編譯階段便已完成了函數的創建工作
預編譯階段:(PS:不管代碼中聲明變量和聲明函數的順序如何,在預編譯階段會先聲明變量,再聲明函數)
<script>var a = undefined;var c = undefined;var b = function(){alert();} </script>
?
執行階段:
<script>a = "1";c = function(){alert();} </script>?
整體執行步驟:
<script>var a = undefined;var c = undefined;var b = function(){alert();}a = "1";c = function(){alert();} </script>題目:
<script>var a = "1";function b(){alert(a);var a = "2";}b();</script>PS:相對與window環境下的變量、函數聲明,每一個作用域都會對其下的變量和函數進行先聲明
<script> functionHello() { alert("Hello"); } Hello(); </script> <script> functionHello() { alert("Hello World"); } Hello(); </script> <script>function Hello() { alert("Hello"); } Hello(); function Hello() { alert("Hello World"); } Hello(); </script>
總結
以上是生活随笔為你收集整理的javascript运行过程中的“预编译阶段”和“执行阶段”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 回调(callba
- 下一篇: 实例讲解js中的预编译