js的執行環境

  • 當在某個環境中爲了讀取或寫入而引用一個標識符時,必須經過搜索來肯定該標識符實際代碼啥。搜索過程是從做用域鏈前端開始的,向上逐級查詢,若是在局部環境中沒有找到,則會沿着做用域鏈向上尋找,直到全局做用域,如還沒找到,則報錯。
  • 經過下面這個栗子,來更好的理解搜索尋找過程
    var color = "blue";
    function getColor (){
    return color;
    }
    alert(getColor());//"blue"
  • 調用案例中的函數getColor()時會引發變量color,爲了肯定變量color值,會開始一個搜索過程,首先會先搜索函數內部(局部環境)是否存在名叫color的變量,在沒有找到的狀況下會在下一個環境(全局環境)中搜索,在哪裏搜到了定義這個變量。
  • 下面的圖形形象的展現了整個搜索過程。
  • 在這個過程當中,若是在局部環境中(getColor函數內部)存在一個color的變量,則搜索就自動中止。好比下面的栗子 var color = "blue";
    function getColor (){
    var color = "red";
    return color;
    }
    alert(getColor());//"red"
  • 修改後的代碼在getColor()函數內部聲明瞭一個名爲color的局部變量,調用該函數時,改變量就會被聲明,而當第二行代碼執行時,意味着必須找到並返回變量color的值,搜索過程會先從局部環境中開始,並且在局部環境中發現了一個名爲color的變量,其值爲"red",到此,搜索結束。return語句返回的color的值就是局部環境中獲得的"red"。
執行環境分爲:全局執行環境(全局環境)和函數執行環境(局部環境)
函數執行環境(局部環境)不只有權訪問函數做用域中的變量,並且有權訪問其包含父環境,設置是全局環境中的變量;
全局執行環境則只能訪問全局環境中定義的變量和函數,而不能直接訪問局部環境中的任何數據。
複製代碼
相關文章
相關標籤/搜索