執行環境與範圍

來源:互聯網
上載者:User

標籤:

  在JavaScript中,執行環境定義了變數和函數有權範文的其他資料,決定了它們各自的行為;範圍就是變數和函數可以被訪問的範圍,分為全域範圍和局部範圍;如:

<script>
  var a = 1; window.onload = function(){
    var b = 2;
    function sum(){
      var c = 3;
      return a+b+c;
    }
    sum();
  };</script>

  以上代碼,全域範圍定義了變數a並為window綁定了一個load事件的處理函數;這個函數內部是一個局部範圍,定義了一個變數b和一個函數sum,這個局部範圍可以訪問全域範圍的變數a,但全域不可以訪問b和sum;函數sum是第三層範圍也是一個局部範圍,定義了一個變數c,這裡可以訪問a和b,但全域和load事件處理函數都不可以訪問c。

執行環境和範圍是一一對應並且相互配合的,執行環境決定函數可以訪問哪些變數和函數,執行環境則保護內部的變數和環境不被外部存取。在記憶體中當前執行函數的執行環境都會進入一個叫環境棧的地方,當函數執行完畢後,就會被環境中踢出去,讓之前也就是父環境進來繼續執行。

在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.