作用域、作用域链

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

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

你可能感兴趣的:(作用域、作用域链)