写出下面代码执行之后的结果,并分析原理
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在浏览器中的运行机制
- 浏览器在运行js代码之前先会开辟一块儿空间,这块儿空间也叫栈内存
ECStack
,也可叫做执行上下文栈。 - 然后创建执行上下文(EC),并压入到
ECStack
中。 - EC中包含,变量对象(VO)和函数(AO)。
- Scope:作用域,创建函数的时候赋值 Scope Chain:作用域链
- 函数执行会创建一个全新的全局上下文

也可以这样理解

再来一个案例
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

网友评论