[[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