JavaScript自我學習之解析與執行

來源:互聯網
上載者:User

標籤:

    如果想要學好JavaScript那麼我們首先必須要知道瀏覽器JavaScript引擎是如何解釋執行JavaScript代碼的,作為一名菜鳥,從自己學習JavaScript的過程來說,真心覺得不瞭解這些在以後的學習JavaScript過程中會徒增許多困惑,多走許多彎路.好了廢話不多說了,我們就一起來看看到底怎麼一個過程吧.

    瀏覽器在執行JavaScript代碼之前會進行類似寫C和C++一樣的先行編譯操作,在先行編譯的階段,首先建立一個當前執行環境下的使用中的物件,並且將那些用 var 聲明的變數設定為當前使用中的物件的屬性,但是這些變數的初始化的賦值都是undefined;而對於那些function 定義的函數也添加為當前使用中的物件的屬性,而他們的值賦予的是函數的定義,特別提醒下對於下面的代碼不要誤解,匿名函數是不會被解析的,funTemp的初始化依舊在執行階段;

1 var funTemp=function() { //匿名函數2    alert("Hello World!");3 }

 針對先行編譯階段我們為了便於理解驗證,那麼首先舉例來看一看:

 1 <script type="text/javascript"> 2    alert(tempFirst);     //傳回值undefined 3    var tempFirst="麥兜"; 4   alert(tempFirst);   //傳回值 麥兜 5     6  alert(Hello);    //傳回值 函數Hello定義語句 7   alert(Hello());    //傳回值 Hello  JavaScript 8   function Hello(){ 9   alert("Hello  JavaScript");10 }11 12   alert(Hi());   //傳回值 undefined13   var Hi=function (){14   alert("Hi   JavaScript");15 }16 17 </script>

              先行編譯階段結束後我們來看看執行階段是如何進行的,首先遇到變數需要解析時候,會首先從當前的執行環境中的使用中的物件進行尋找,如果沒有找到但是該使用中的物件擁有prototype屬性中進行尋找,沒有找到的話按照範圍鏈繼續尋找.遇到var a=...這樣的語句時候則會給相應的變數a進行賦值,下面我們舉個有意思例子來加深下對這個概念的理解。

 1  1 <script type="text/javascript"> 2  2  3  3 var name="Sudo"; 4  4  5  5 function nameScope() 6  6 {   7  7    alert(name);   //  傳回值 undefined 8  8    var name="Admin"; 9  9    alert(name);  //   傳回值  Admin10 10 }11 11 nameScope();12 12 alert(name);  // 傳回值 Sudo13 13 </script>

         在執行nameScope()函數時候,第一個alert(name)會先從該函數的範圍裡面尋找name屬性,因為在先行編譯的時候確實賦予了當前範圍裡面有name屬性,並且賦值為undefined,找到了以後當然不會去尋找外圍的全域name了,所以先彈出undefined,然後函數裡面對其賦值admin初始化,繼而彈出Admin,同樣在函數執行完成後,類似與其他語言裡面的解構函式一樣,所有佔用的記憶體全部釋放了,而其變數也僅僅在當前函數內執行有效,最外面alert(name),則訪問的即是全域變數sudo為彈出結果,留給有意思的代碼,猜猜結果

 1 <script type="text/javascript"> 2  3 var name="Sudo"; 4  5 function nameScope() 6 {   7    alert(name);   //  傳回值 Sudo 8    name="Admin"; 9    alert(name);  //   傳回值  Admin10 }11 nameScope();12 alert(name);  // 傳回值 Admin13 </script>

       好了,其實這些是自己一邊學習一邊總結的,以後或多或少肯定會有錯誤,希望大家提點下哦,

 

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.