作用域
// 作者: liu6
let a = 1
function aa(){
console.log(a) //输出1
}
function bb(){
let a = 2 // 作用域不在A里
aa()
}
bb()
作用域链
scope =
[
{AO: 活动对象(Active Object},
{VO: 活动对象(Variable Object},
];
举例说明
function a() {
function b() {
var b = 234;
}
var a = 123;
b();
}
var gloab = 100;
a();
第一步: a函数定义
a函数对象的属性[scope]作用域指向作用域链scope chain。 第一项是全局对象,分辨是this、window、document、a、glob。(相当于链接它的父级)
第二步执行: a函数执行
a函数对象作用域链scope chain 第一项指向 AO。分别是this、arguments、a、b。第二指向是它的上一个作用域GO全局对象。GO全局对象里分别是this、Window、document、a、global。(增加a函数本身、然后关联父级)
第三步: B函数的定义
B函数对象的作用域链第第一项AO活动对象。分别是 this、argument、a、b。第二项指向全局对象。(它的父级a、a的父级全局对象)
第四步:B函数执行
执行后。b函数的作用域链增加b本身。第一项指向AO是它本身。分别是this、argument、b。第二项目是调用它的A。分别是this、argument、a、b。第三项目是调用A的全局对象。