JS 执行过程:执行上下文、词法环境

来自Wikioe
Eijux讨论 | 贡献2023年4月17日 (一) 18:12的版本 (创建页面,内容为“category:JavaScript == 执行上下文(Execution Contexts) == <big>'''执行上下文(Execution Contexts)'''</big>:是评估和执行 JavaScript 代码的环境的抽象概念 —— JavaScript 代码都需要运行在相应的“执行上下文”中 执行上下文一共有三种类型: # <span style="color: green">'''全局执行上下文'''</span>:基础的上下文,任何不在函数内部的代码都在其中。 #: 它会执行两…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


执行上下文(Execution Contexts)

执行上下文(Execution Contexts):是评估和执行 JavaScript 代码的环境的抽象概念 —— JavaScript 代码都需要运行在相应的“执行上下文”中

执行上下文一共有三种类型:

  1. 全局执行上下文:基础的上下文,任何不在函数内部的代码都在其中。
    它会执行两件事:创建一个全局的 window 对象(浏览器的情况下),并且设置 this 的值等于这个全局对象。
    • 程序首次允许时创建 —— 一个程序中只会有一个全局执行上下文
  2. 函数执行上下文:函数内部的代码所在的上下文。
    • 每次函数被调用都会创建一个新的执行上下文 —— 同一函数的多次执行,会多个上下文
  3. eval执行上下文:eval() 内部的代码所在的执行上下文
    • 使用“eval方法”时创建
“执行上下文”定义了代码执行时的环境、作用域和数据流等重要属性,包括变量对象(Variable Object)、作用域链(Scope Chain)、this 指向和函数参数等信息。

每个脚本、函数的“执行”都会创建一个新的“执行上下文”;

执行上下文栈

执行上下文栈(Execution context stack,ECS):又称“调用栈 / 执行栈”(call stack),用于管理“执行上下文”

函数的“执行过程”就是:对应的“执行上下文”(栈帧)在“调用栈”中的“入栈”(开始执行)、“出栈”(执行完毕)操作。


示例:

let a = 'Hello World!';
function first() {
  console.log('Inside first function');
  second();
  console.log('Again inside first function');
}
function second() {
  console.log('Inside second function');
}
first();
console.log('Inside Global Execution Context');

生命周期

词法环境(Lexical Environment)

参考

[1]