核心:JS中的script是分段執行的。
<script> var i = 10; </script> <script> alert(i); </script>
上面的例子中,彈出結果10。因為在之前script語句段定義的變量和函數可以再其他script語句段中使用。在一個js程序中,可以有多個script語句段,那麼它們如何工作呢?
script執行過程:
1.讀入第一個代碼段
2.編譯(聲明變量,聲明函數,語法檢查,語義檢查,代碼優化,分析並得到代碼書)
3.執行
4.讀入下一代碼段
5.編譯
6.執行
7.讀入下一代碼段
......
n.結束
舉個例子來說
<script> //例1 alert(i); </script>
<script> //例2 alert(i); var i=10; </script>
例1的代碼執行後,什麼都不會彈出,因為已經報錯了。但例2的代碼會彈出undefined。因為i已經聲明但沒有賦值。因為代碼段是先編譯再執行,編譯負責生成,執行負責賦值。
區分編譯錯誤和運行錯誤:
<script> alert(i; //編譯錯誤 alert(i);//運行錯誤 alert('hello'); </script>
但無論是哪種錯誤,當前代碼段中的後面的代碼都不執行。
無論是哪種錯誤,不會影響後面的代碼段的執行。
編譯錯誤時,當前代碼段會停止,代碼中所有聲明全部無效。
運行錯誤時,前面的代碼已經執行完畢,不會影響該代碼段內前面的內容。