JavaScript 做用域、做用域鏈

[[scope]]:每一個JavaScript函數都是一個對象,對象中有些屬性咱們能夠訪問,但有些不能夠,這些屬性僅供JavaScript引擎存取,[[scope]]就是其中一個.函數

[[scope]]就是咱們說的做用域,其中存儲了執行期上下文的集合.spa

 

做用域鏈:[[scope]]中存儲的執行期上下文的集合,這個集合呈鏈式連接,咱們稱之爲做用域鏈.code

1 <script>
2        function a(){
3            
4        }
5 
6 //a.[[scope]]
7 
8 </script>

執行期上下文: 函數執行時建立的一個內部對象,定義了函數執行時的環境(GO/AO),函數每次執行,執行期上下文都是獨一無二的,函數執行完就會被銷燬.對象

 

查找變量是從做用域鏈的頂端以此查找.blog

 

函數被定義時,做用域鏈包括上級函數的AO和全局GOip

 

 

 1 <script>
 2 
 3 function a(){
 4      function b(){
 5            var b = 234;
 6      }
 7      var a = 123;
 8      b();
 9 }
10 
11 var glob = 100;
12 a();
13 
14 </script>

 

a執行建立了b,  b函數被建立時的AO就是引用了函數a執行時的AO , b是站在a的肩膀上看世界 , 建立時獲取了a的勞動成果(做用域鏈).作用域

 

舉個例子:io

<script>
function a(){
     function  b(){
           function c(){
      
           }
     }
}
a();

</script>

執行時做用域鏈:function

這裏全部的aAO都是同一個,全部bAO都是同一個class

相關文章
相關標籤/搜索