作用域和执行上下文的区别
作用域与执行上下文在静态边界和运行时环境上的区别说明
#status / growing
#type / concept
[!info] related notes
作用域和执行上下文的区别
这是最容易混的地方。
作用域
是静态的,写代码时基本就确定了。
它回答的是:
这个变量在什么范围内能访问?
执行上下文
是动态的,运行代码时创建。
它回答的是:
这段代码现在在什么环境下执行?
对比例子
const x = 1;
function foo() {
const y = 2;
function bar() {
console.log(x, y);
}
return bar;
}
const fn = foo();
fn();
这里:
bar的作用域在它定义时就确定了:它能访问x和yfoo()执行时,会创建foo的执行上下文fn()执行时,会创建bar的执行上下文bar虽然是在全局里调用的,但它仍然能访问foo里的y,因为作用域看的是定义位置,不是调用位置