scope存放的是作用域,他是阴式调用,我们调用不了
里面存储了运行期上下文集合
运行期上下文:当函数执行时(前一刻),会创建一个被称为执行期上下文的内部对象,一个执行器上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以调用一个函数就会导致创建多个执行上下文,当函数执行完毕,他所产生的执行上下文就会被销毁.
查找变量:从作用域链的顶端依次向下查找
作用域链:[[scope]]中所储存的执行期上下文对象的集合,这个集合呈链式连接,我们把这种链接叫做作用域
function a(){
function b(){
var b = 234;
}
var a=123;
b();
}
var glob=100;
a();
练习
function a(){
function b(){
function c(){
}
c();
}
b();
}
a();
//作用域执行的顺序
a defined a.[[scope]]----> 0:GO
a doing a.[[scope]]---->0 : aAO
1 : GO
d defined d.[[scope]]---->0 : aAO
1 : GO
d doing d.[[scope]]---->0 : dAO
1 : aAO,
2 : GO,
c defined c.[[scope]]---> 0 : dAO
1 : aAO,
2 : GO,
c doing c.[[scope]]----> 0 : cAO
1 : dAO,
2 : aAO
3 : GO,
闭包
function a(){
function b(){
var bbb=234;
document.write(aaa)
}
var aaa=123;
return b;
}
var glob=100;
var demo=a();
demo();
//当a函数执行完的时候returnb此时demo就是b函数
//当a的AO销毁时之前return之前定义了b保留a的作用域成果
//当a的AO销毁之后return b执行,执行的时候b还是有a的AO
//b执行作用域 0:bAO 中没有aaa
// 1:aAO 有 访问
// 2:GO
//执行结果123
//生成闭包 内部函数被保存到了外部.一定生成闭包