笔记:作用域与作用域链

127 阅读1分钟

作用域

// 作者: 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的全局对象。