首頁  >  文章  >  web前端  >  js編譯和執行順序詳解

js編譯和執行順序詳解

小云云
小云云原創
2018-02-24 14:27:011467瀏覽

Javascript是一段一段執行的,以script標籤來分割,執行每一段之前,都有一個“預編譯”, 預編譯幹的活有兩:1.聲明所有var變數(初始為undefined),2 .解析定義式函數語句。

有個關於「window作用域下,a = 1和var a = 1」 的區別的很經典:

a = 1相当于window.a = 1,是动态地为window添加一个成员; 
var a = 1是在当前作用域(也就是window)下声明一个a,这个声明是在整个作用域内都有效的。 
换句话说,其实区别就在于var a = 1比a = 1多了一个声明的行为。

看看下面的例子:
1.

alert(w);
alert('ok');
w = 2;

報錯:w is not defined
2.

alert(w);
alert('ok');var w = 2;

依序彈出undefined和ok。預編譯的時候,宣告了變數w;執行到alert(w)這行程式碼的時候,t尚未被賦值,所以彈出undefined。
3.

a();function a() {}alert('ok');

彈出ok。預編譯的時候,解析了定義式函數語句function a() {},順利執行。
4.

b();var b = function() {};
alert('ok');

b不是函數,執行報錯。預編譯的時候,宣告了變數b = undefined;執行到b()時,a還等於undefined,不是函數,所以執行b()會報錯。
5.

<script type="text/javascript">
    c();
    alert(&#39;first&#39;);</script><script type="text/javascript">
    alert(&#39;second&#39;);</script>

彈出second。因為javascript是一段一段執行的,第一段執行到c()的時候報錯,整個第一段都不會再執行,第二段正常執行。

相關推薦:

JavaScript執行順序分析

JavaScript執行順序的簡單介紹

詳解js在html中的載入執行順序

以上是js編譯和執行順序詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn