jQuery源码笔记.jpg

作用域 Scope

2020-04-15  本文已影响0人  柠檬果然酸

上下文
对于全局上下文,它是全局对象自身;对于函数,它是AO对象。

scope属性
函数内部有个[[ scope ]],它是用来保存作用域链的。
作用域链大多数与内部函数相关。

例子

var x = 10;

function foo() {
    var y = 20;
    function bar() {
        alert(x + y);
    }
    return bar;
}

foo()(); // 30

foo函数被定义时

foo.[[ scope ]]  = [
    Global Object
]

foo函数被调用时

foo.[[ scope ]]  = [
    foo函数的AO的对象,
    Global Object
]

bar函数被定义时

bar.[[ scope ]]  = [
    foo函数的AO的对象,
    Global Object
]

bar函数被调用时

bar.[[ scope ]]  = [
    bar函数的AO的对象,
    foo函数的AO的对象,
    Global Object
]

注意
[[ scope ]]在函数创建时被存储,静态(不变的),永远永远,直至函数销毁。
函数可以永不调用,但[[ scope ]]属性已经写入,并存储在函数对象中。

查找变量
当函数需要用到某个变量时,在作用域链中从上往下的查找

更详细的文档传送门

上一篇 下一篇

猜你喜欢

热点阅读