johanazhu / fe

前端知识地图 五年前端三年面试 元前端
https://fe.azhubaby.com
MIT License
50 stars 9 forks source link

关于执行上下文创建时间的疑问 #30

Open binghuis opened 6 months ago

binghuis commented 6 months ago

你好,最近我在研究 JS V8 引擎相关的知识,在看执行上下文相关的时候翻阅了大量的文章视频包括极客时间李兵写的电子书,但是有几个疑问我至今没有搞懂,包括在你的文章里也没找到答案,但是我还是想问一下。

关于 V8 引擎我知道 JS 代码经历了,JS => 词法分析生成 Tokens => 语法分析生成 AST => 解释器解释执行字节码 => JIT 技术优化编译器编译机器码这个步骤。

有人说执行上下文是代码执行的时候创建的,有人说执行上下文是代码编译阶段创建的,还有人说全局执行上下文是在宿主环境初始化的时候创建的而函数执行上下文是在函数被调用的时候创建的。

我的疑惑就在于全局执行上下文和函数执行上下文到底是什么阶段创建的,是编译阶段还是执行阶段?是词法解析阶段还是语法解析阶段?

johanazhu commented 6 months ago

你好,最近我在研究 JS V8 引擎相关的知识,在看执行上下文相关的时候翻阅了大量的文章视频包括极客时间李兵写的电子书,但是有几个疑问我至今没有搞懂,包括在你的文章里也没找到答案,但是我还是想问一下。

关于 V8 引擎我知道 JS 代码经历了,JS => 词法分析生成 Tokens => 语法分析生成 AST => 解释器解释执行字节码 => JIT 技术优化编译器编译机器码这个步骤。

有人说执行上下文是代码执行的时候创建的,有人说执行上下文是代码编译阶段创建的,还有人说全局执行上下文是在宿主环境初始化的时候创建的而函数执行上下文是在函数被调用的时候创建的。

我的疑惑就在于全局执行上下文和函数执行上下文到底是什么阶段创建的,是编译阶段还是执行阶段?是词法解析阶段还是语法解析阶段?

你好,全局执行上下文和函数执行上下文是在JavaScript代码执行过程中创建的。它们是在JavaScript引擎的创建阶段创建的,而不是在编译阶段或执行阶段。在创建阶段,JavaScript引擎会进行词法解析和语法解析,并创建执行上下文对象,包括词法环境和变量环境。词法环境包括环境记录和对外部环境的引用,而变量环境包括this绑定。这些阶段都发生在代码的执行之前,确保了代码在执行阶段能够顺利执行。

johanazhu commented 6 months ago

你好,最近我在研究 JS V8 引擎相关的知识,在看执行上下文相关的时候翻阅了大量的文章视频包括极客时间李兵写的电子书,但是有几个疑问我至今没有搞懂,包括在你的文章里也没找到答案,但是我还是想问一下。 关于 V8 引擎我知道 JS 代码经历了,JS => 词法分析生成 Tokens => 语法分析生成 AST => 解释器解释执行字节码 => JIT 技术优化编译器编译机器码这个步骤。 有人说执行上下文是代码执行的时候创建的,有人说执行上下文是代码编译阶段创建的,还有人说全局执行上下文是在宿主环境初始化的时候创建的而函数执行上下文是在函数被调用的时候创建的。 我的疑惑就在于全局执行上下文和函数执行上下文到底是什么阶段创建的,是编译阶段还是执行阶段?是词法解析阶段还是语法解析阶段?

你好,全局执行上下文和函数执行上下文是在JavaScript代码执行过程中创建的。它们是在JavaScript引擎的创建阶段创建的,而不是在编译阶段或执行阶段。在创建阶段,JavaScript引擎会进行词法解析和语法解析,并创建执行上下文对象,包括词法环境和变量环境。词法环境包括环境记录和对外部环境的引用,而变量环境包括this绑定。这些阶段都发生在代码的执行之前,确保了代码在执行阶段能够顺利执行。

以及,可以看看这篇文章:https://www.freecodecamp.org/news/how-javascript-works-behind-the-scene-javascript-execution-context/