javascript執行順序簡單介紹
很多初學者可能會認為此問題沒有必要介紹,因為js就是順序執行的,也就是從上到下一通執行下來就完畢了,其實如果細究下來,中間還是有許多需要特別注意的地方,否則可能會出現意想不到的問題,下面就介紹一下相關內容。
一.什麼是程式碼塊:
其實什麼是程式碼塊,大家都不陌生,但是一扯上術語,可能一扯上術語就會難倒不少人。
所謂的程式碼塊其實就是由<script></script>標籤包裹的內容。
[HTML] 純文字檢視 複製程式碼<script type="text/javascript"> var str="antzone"; console.log(str); </script>
上面就一個簡單的程式碼塊。程式碼塊和程式碼之間雖然是獨立的,但是變數和函式是共享的,程式碼如下:
[HTML] 純文字檢視 複製程式碼<script type="text/javascript"> var str="antzone"; alert(y); </script> <script type="text/javascript"> alert(str); </script>
上面是兩個獨立的程式碼塊,同時編譯和執行是以程式碼塊為單位的,所以第一個程式碼塊中雖然會出現,導致程式無法執行,但是並不會影響第二個程式碼塊的編譯和執行,同時第二個程式碼塊中使用的是第一個程式碼塊中宣告的變數,這說明程式碼塊之間既互相獨立,而又存在共享性。
二.預編譯和執行期:
其實javascript程式碼的解析分為兩個階段,一個是預編譯階段,一個是執行期。
在預編譯階段,會將變數宣告和函式宣告前置,但是需要特別注意的是,變數只會宣告不會被賦值。
[JavaScript] 純文字檢視 複製程式碼func(); function func(){ console.log("螞蟻部落"); } function func(){ console.log("分享互助"); }
在上面的程式碼中,雖然函式的呼叫在函式宣告之前,但是依然有效,這說明在預編譯期間函式的宣告是前置的,同時需要注意的是,後面宣告的函式會覆蓋前面宣告的同名函式,再來看一段關於變數的程式碼:
[JavaScript] 純文字檢視 複製程式碼console.log(str); var str="antzone";
以上程式碼的輸出結果是undefined,這說明變數宣告雖然前置了,但是並沒有被賦值,再來看一段程式碼:
[JavaScript] 純文字檢視 複製程式碼func(); var func=function(){ console.log("螞蟻部落"); }
以上程式碼會報錯,上面其實就是一個變數宣告,只是變數的值是函式物件而已,呼叫函式的時候變數值只是undefined。
三.最後總結:
在總結之前再來看一段程式碼:
[HTML] 純文字檢視 複製程式碼<script type="text/javascript"> func(); </script> <script type="text/javascript"> function func(){ alert("螞蟻部落"); } </script>
上面的程式碼會報錯,很多朋友會有這樣的疑問,不是函式宣告會前置嗎,確實如此,但是js的預編譯和執行是以程式碼塊為單位的,在預編譯和執行第一個程式碼塊的時候,沒有函式的宣告所以會報錯。
相關文章
- js程式碼執行順序簡單介紹JS
- jQuery ajax的執行順序簡單介紹jQuery
- javascript表示式中的運算順序簡單介紹JavaScript
- javascript資料結構之順序查詢簡單介紹JavaScript資料結構
- JavaScript執行順序分析JavaScript
- JavaScript的執行順序JavaScript
- javascript程式碼執行機制簡單介紹JavaScript
- css選擇器的解析順序簡單介紹CSS
- JavaScript for迴圈 執行順序JavaScript
- JavaScript 執行順序淺析JavaScript
- for語句括號中程式碼執行順序介紹
- JavaScript 簡單介紹JavaScript
- 按照順序動態載入js檔案簡單介紹JS
- javascript執行機制之執行順序詳解JavaScript
- 簡單介紹克隆 JavaScriptJavaScript
- javascript物件簡單介紹JavaScript物件
- javascript this指向簡單介紹JavaScript
- javascript加密簡單介紹JavaScript加密
- animate動畫連續執行簡單介紹動畫
- 簡單介紹JavaScript閉包JavaScript
- JavaScript希爾排序簡單介紹JavaScript排序
- javascript constructor簡單介紹JavaScriptStruct
- javascript建立物件簡單介紹JavaScript物件
- javascript的this用法簡單介紹JavaScript
- javascript arguments用法簡單介紹JavaScript
- javascript 變數簡單介紹JavaScript變數
- javascript簡單模板引擎介紹JavaScript
- javascript作用域簡單介紹JavaScript
- Sql執行順序SQL
- 【多執行緒系列】CAS、AQS簡單介紹執行緒AQS
- JavaScript return語句簡單介紹JavaScript
- javascript鏈式呼叫簡單介紹JavaScript
- javascript除法運算簡單介紹JavaScript
- javascript &&和||運算子簡單介紹JavaScript
- javascript方法過載簡單介紹JavaScript
- javascript遞迴概念簡單介紹JavaScript遞迴
- JavaScript this指向解綁簡單介紹JavaScript
- javascript陣列操作簡單介紹JavaScript陣列