[[scope]]:每一个JavaScript函数都是一个对象,对象中有些属性咱们能够访问,但有些不能够,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一个。javascript
[[scope]]指的是咱们常说的做用域,其中存储了运行期上下文的集合。java
做用域链:[[scope]]中所储存的执行期上下文对象的集合,这个集合呈链式连接,咱们叫它为做用域链。函数
function a() { var aa = 1 console.log(aa) console.log(bb) //报错 function b() { var bb = 2 console.log(aa, bb) console.log(cc) //报错 function c() { var cc = 3 console.log(aa, bb, cc) //正常 } c() } b() } a()
a函数[[scope]]执行期上下文对象的链式集合:变量aa,b函数->全局环境。code
b函数[[scope]]执行期上下文对象的链式集合:b函数,变量bb,c函数->变量aa,a函数->全局环境。对象
c函数[[scope]]执行期上下文对象的链式集合:变量cc->b函数,变量bb,c函数->变量aa,a函数->全局环境。ip
查找变量遵循从做用域链的顶端依次向下查找的原则。因此在所在的做用域链查找不了该变量会报错。作用域