美文网首页
作用域、作用域链

作用域、作用域链

作者: 无穷369 | 来源:发表于2021-02-26 00:54 被阅读0次

    写出下面代码执行之后的结果,并分析原理

    let x = 1;
    function A(y){
        let x = 2;
        function B(z){
            console.log(x + y + z);
        }
        return B
    }
    let C = A(2);
    C(3);
    

    执行结果

    7
    

    原理分析
    考察点是js在浏览器中的运行机制

    1. 浏览器在运行js代码之前先会开辟一块儿空间,这块儿空间也叫栈内存 ECStack,也可叫做执行上下文栈。
    2. 然后创建执行上下文(EC),并压入到 ECStack 中。
    3. EC中包含,变量对象(VO)和函数(AO)。
    4. Scope:作用域,创建函数的时候赋值 Scope Chain:作用域链
    5. 函数执行会创建一个全新的全局上下文
    image.png

    也可以这样理解


    image.png

    再来一个案例

    let i = 1;
    let fn = (i) => (n) => console.log(n + (++i))
    let f = fn(1)
    f(2)
    fn(3)(4)
    f(5)
    console.log(i)
    

    结果

    4
    8
    8
    1
    
    image.png

    相关文章

      网友评论

          本文标题:作用域、作用域链

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