Skip to content

前言

本文让你知道啥是执行上下文栈!!!

刚学js的时候以为js是逐行解析的,后来才明白js是一段一段的分析执行,当执行一段代码的时候,会进行一个“准备工作”,比如变量提升和函数提升。

JavaScript 的可执行代码(executable code)的类型一共只有三种,全局,函数,eval(基本用不到);

当遇到函数执行的时候,就会创建一个执行上下文;

执行上下文栈

当我们写的函数多了的时候,如何管理创建的那么多执行上下文呢? JavaScript 引擎创建了执行上下文栈(Execution context stack,ECS)来管理执行上下文;

我们来模拟一下执行上下文栈 栈首先是个数组

js
ECStack = [];

试想当 JavaScript 开始要解释执行代码的时候,最先遇到的就是全局代码,所以初始化的时候首先就会向执行上下文栈压入一个全局执行上下文,我们用 globalContext 表示它,并且只有当整个应用程序结束的时候,ECStack 才会被清空,所以程序结束之前, ECStack 最底部永远有个 globalContext:

js
ECStack = [
    globalContext
];