也談JavaScript運行機制

來源:互聯網
上載者:User

最近被JavaScript的跨域問題和相容性問題弄得焦頭爛額,於是急忙抽抽時間複習複習JavaScript基礎,這裡就說說我對JavaScript運行機制的一些見解。

 JavaScript不同於現時的c#,Java等編譯性語言,得寫好原始碼後,運行編譯器進行編譯成位元組碼(java),clr等接近彙編的語言,老麻煩了,而且像Java和c#還不能脫離他的虛擬機器運行呢。但是JavaScript只要編寫好,下一秒就能在瀏覽器運行,非常方便快捷,因為JavaScript是解釋性語言,是啟動並執行時候動態解析執行的。

   也許你會說,既然是逐行解析啟動並執行,就沒有必要說什麼見解啦,多簡單哦!!其實不然,所謂的逐行解析只是形象的說法,任何語言運行之前,都要免不了詞法,文法的解析,解析失敗是會報錯的。但是可能大家會疑問,很多情況,瀏覽許多網站的時候,瀏覽器都會報JavaScript指令碼錯誤,為什麼JavaScript的函數還能運行呢?其實它運行成功的是那些沒有錯誤的JavaScript函數而已,而且JavaScript載入編譯的時候,是以<script>遵守document載入html節點樹形載入的,所以是先載入的<Script>是會先啟動並執行,但是在<script>標籤裡面,但JavaScript遇到編譯錯誤的程式碼的時候就會報錯跳出這段<script>,所以之前沒有跳出<script>的時候載入的程式碼片段因為已經載入到document裡面,所以是可以啟動並執行:

代碼

<script>
//同一個script內
var a = "test";
alert(a);//a正確定義,所以這裡會在瀏覽器彈出對話方塊

alert(b);//b事先沒有定義,所以這裡出現語法錯誤,這裡就會出錯跳出
//後面的都沒有語法錯誤,但是因為上面語法錯誤,跳出這段<script>,所以下面到</scirpt>之內的代碼無論如何都不會啟動並執行。同理,寫的函數,在別的地方也會調用失敗,因為下面的代碼根本沒有載入到document裡
var c= "test";
alert(c)
</script>

但是,正因為跳出了只是本段<script>,所以是不會影響其他<script>的載入的,所以下面文法正確的<script>塊還是會正常的運行,如:

 

代碼

<scrirpt type="text/javascript">
alert(test);//沒有定義test,所以出錯,下面的不能運行
var test = "test";
alert(test);//這裡不能運行
</script>
<--!接著下一段JavaScript代碼-->
<scrirpt type="text/javascript">
var test = "test";
alert(test);//可以運行,不受上一段JavaScript影響
</script>

        所以到這裡,JavaScript的運行機制就很明朗啦,自上而下的載入解析到document,遇到詞法錯誤,語法錯誤,會跳出本段<script>標籤,但是還會繼續載入隨後的<script>標籤的JavaScript代碼,如此迴圈,直到document載入完畢(完)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.