深入理解javascript中執行環境(範圍)與範圍鏈

來源:互聯網
上載者:User

標籤:找不到   console   範圍   分析   str   mic   sof   arguments   log   

深入理解javascript中執行環境(範圍)與範圍鏈

  相信很多初學者對與javascript中的執行環境與範圍鏈不能很好的理解,這裡,我會按照自己的理解同大家一起分享。

  一般情況下,我們把執行環境分為全域執行環境和局部執行環境,其中局部執行環境我們又可以稱之為函數執行環境。那麼究竟什麼使執行環境呢?通俗的說,執行環境即為代碼執行時所處的環境。我們下來看一看如下代碼,再進一步分析之。

<script>
var name="zhuzhenwei";function changeName(){ if (name=="zhuzhenwei"){ name="heting"; }else{ name="zhuzhenwei"; }}changeName();console.log(name); //heting
</script>

  如上述代碼,當執行第一個語句時,該語句所在的環境為全域執行環境,應當注意的是:每個執行環境都有一個與之相關聯的變數對象,對於全域執行環境,與它向關聯的對象為window對象。緊接著,下面這條語句聲明了一個函數(注意:這裡僅僅是聲明了函數,沒有被調用之前是不會執行內部代碼的)。  同樣這個函數也是處於全域執行環境的。最後,我們調用了changeName()函數,一旦調用了該函數,那麼立即跳轉到了changeName()函數的執行環境(即函數執行環境),一旦進入執行環境,便開始建立函數內部相應的變數(如函數中假設出現var a=12;這樣的代碼),不調用函數是不會建立的,且與之相關的變數對象我們認為是使用中的物件(使用中的物件開始只包含一個變數,即arguments對象),自此開始從上到下執行語句。與此同時,代碼在函數環境中執行時,就會建立變數對象的一個範圍鏈,這個範圍鏈包含changeName()的變數對象和全域變數對象。

   範圍鏈實際上就是我們可以通過它從前端到末端可以訪問的範圍,即保證對執行環境有權訪問的所有變數和函數的有序訪問,其中前端是指當前執行代碼所在的變數對象,這裡現在就是changeName()函數的變數對象,末端是全域變數對象,比如說:我們在執行函數時,需要尋找一個標識符,這是就是通過範圍鏈的末端進行尋找,若範圍鏈的末端找不到,就一直向上尋找,直到window對象。雖然在全域環境中我沒有提到範圍鏈,但實際上全域環境中範圍鏈也是存在的,只是只有一個全域變數對象。 很明顯:訪問局部變數比訪問全域變數更快,因為不用向上搜尋範圍鏈。顯然,範圍鏈是隨著代碼所處的執行環境的不同而動態變化的。            

 

  當執行完changeName()函數之後,即函數執行環境中的代碼執行完成之後,該環境中的局部變數和局部對象會被立即銷毀(如果變數沒有用var聲明,表明是全域變數,不會在局部環境的代碼執行之後銷毀),隨即執行環境由函數執行環境轉向全域執行環境,繼續執行console.log(name);語句。只是,如果我們關閉網頁或瀏覽器,全域環境也將被銷毀。

 

   總結如下:

  • 執行環境也成為範圍,執行環境決定了變數的生命週期。
  • 執行環境有全域執行環境和局部執行環境之分,每進入一個執行環境就會建立一個用於搜尋變數和函數的範圍鏈,於是我們認為這個範圍鏈是動態變化的。
  • 函數的局部環境不僅有權訪問函數範圍中的變數,而且有權訪問其包含環境(父環境),乃至全域環境;而全域環境只能訪問在全域環境中定義的變數和函數(局部環境中未使用var聲明的變數也屬於全域變數),不能訪問局部環境中的資料(沒有說所有資料,正是因為全域變數可以訪問)。注意:函數中的參數時函數的局部變數。

世界上本沒有路,你走過去了,那便是你的路。

深入理解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.