作用域和执行上下文的区别

作用域与执行上下文在静态边界和运行时环境上的区别说明

#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作用域在它定义时就确定了:它能访问 xy
  • foo() 执行时,会创建 foo 的执行上下文
  • fn() 执行时,会创建 bar 的执行上下文
  • bar 虽然是在全局里调用的,但它仍然能访问 foo 里的 y,因为作用域看的是定义位置,不是调用位置
创建于 2026/3/14 更新于 2026/5/27