作用域 Scope

作者: 柠檬果然酸 | 来源:发表于2020-04-15 22:40 被阅读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 ]]属性已经写入,并存储在函数对象中。

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

    更详细的文档传送门

    相关文章

      网友评论

        本文标题:作用域 Scope

        本文链接:https://www.haomeiwen.com/subject/agvtrhtx.html