作用域
函数的属性
function test(){
}
//可使用的属性例如 test.arguments; test.name等
//不可访问的属性test.[[scope]](隐式属性,系统自行调用),存放的内容为作用域,执行期上下文的集合
执行期上下文(可以理解为AO)
- 详解:在执行前(预编译期间),产生的内部对象AO;完成函数执行后执行上下文销毁;执行多次函数,产生多个AO;
[[scope]]详解
作用:存储各个变量作用域,存储形式类似与数组(单链表)
- 示例详解
function a(){
function b(){
var b =234;
}
var a = 123;
b();
}
var glob =100;
a();
-
自己做了一些图解,便于理解
a的相关作用域存储原理
b的相关作用域存储原理 - 注意几点
- b函数在定义时和a函数在执行时的AO对象指的都是a函数的AO
- AO对象始于预编译,终于调用完成
- 若对方法进行两次或两次以上的调用,其中的AO对象内容一致(递归除外),但是对象并不一致,可以理解为存储AO的内存地址发生了变化 (此处理解为个人理解)
网友评论