javaScript代碼執行順序

來源:互聯網
上載者:User

標籤:變數範圍   瀏覽器   函數   全域   其他   獨立   報錯   先行編譯   範圍鏈   

      javaScript是一種描述型指令碼語言,由瀏覽器進行動態解析和執行。 頁面載入過程中,瀏覽器會對頁面上傳入的每個js代碼塊進行掃描。 JavaScript是一段一段的分析執行的,在分析執行同一段代碼中,定義式函數會 被提取出來優先執行。函數定義執行完畢後,才會按順序執行其他代碼。

一、代碼塊

   JavaScript代碼塊是由一對script開始標籤和結束標籤包裹的一段代碼。 JavaScript是按照代碼塊來進行編譯和執行的,代碼塊之間相互獨立,但是前面執行的變數和方法,後面的代碼塊可以使用。 前面代碼塊報錯,不影響後面代碼塊的執行。

二、前置處理期間和執行期

      JavaScript的執行過程分為兩個階段:前置處理期間和執行期。 先行編譯期會對本代碼塊中的所有聲明的變數和函數(此時處理的只是聲明式函數,而非賦值式函數)進行處理,變數和函數只是進行了聲明,並未進行初始化及賦值(即只是分配了記憶體)。

三、執行順序

      首先進行預先處理,之後按照代碼的順序執行代碼。

四、聲明式函數和賦值式函數

1.聲明式函數     

    function Fun(){ 

                     

   } 

2.賦值式函數     

   var Fn = function{ 

 

   } 

五、變數範圍及範圍鏈

      函數執行過程中,每遇到一個變數,都會經曆一次標示符解析的過程,決定從哪裡擷取及儲存資料 。該過程從範圍鏈的使用中的物件開始尋找,如果找到了就用這個標示符,如果沒有找到就 繼續搜尋範圍鏈中的下一個對象,如果搜尋完所有的對象都未找到,則認為該標示符未定義。 因此標示符所在的位置越深,讀寫速度越慢,全域變數總是在範圍鏈的最末端,因此編寫代碼時應該盡量少使用全域變數 如果一個跨範圍的對象被引用了一次以上,則先把它儲存到局部變數裡再使用。 因此,如果局部變數和全域變數同名,則程式會使用局部變數而不是全域變數。 var a = "globalStr"; function fun(){    alert(a);    var a = "innerstr"; }//彈出undefined。 局部變數a只進行聲明並沒有賦值,因此輸出undefined。

function fun(){

     alert(“測試內容1”);

}  

fun();  

function fun(){

     alert(“測試內容2”);  

}

fun();

兩次函數調用都輸出“測試內容2"

      這表明,在JavaScript分析執行同一段代碼時,定義式的函數會被提取出來優先執行。之後,才會按順序執行 其他的代碼。也就是第一個函數被調用之前已經被第二個函數覆蓋了,因此第一次調用函數也同樣輸出第二個函數的內容。

 

javaScript代碼執行順序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.