📜  JavaScript 是如何工作的,代码是如何在幕后执行的?

📅  最后修改于: 2022-05-13 01:56:40.868000             🧑  作者: Mango

JavaScript 是如何工作的,代码是如何在幕后执行的?

JavaScript 是世界上一门有趣的语言,它的工作过程与其他语言有很大不同。 JavaScript 是同步的(特定的执行顺序),单线程语言(这意味着 JavaScript 一次只能执行一个命令)。

JavaScript 中的所有内容都发生在 EXECUTION CONTEXT 中,您可以假设它是一个大盒子或一个容器,在其中执行整个 JavaScript 代码。 EXECUTION CONTEXT 包含两部分,一是内存(变量环境),所有变量和函数都存储键:值对,二是代码组件(执行线程),代码一次执行一行(如图所示)在下面)。

执行上下文的图示

现在,当您运行 JavaScript 代码时会发生什么?

简单的答案是:创建了一个执行上下文。

现在我在下面写一个演示代码,我会逐行说明代码是如何运行的。

Javascript


当您运行整个代码时,会创建一个全局执行上下文,它包含两部分,一个是内存,另一个是代码执行。

当遇到第一行时,它将为所有变量(n、3、5)和函数(square)保留内存。在为变量保留内存时,它会保留一个未定义的特殊值,而对于函数,它会存储整个代码。图示如下。

全球执行环境的图示

为所有变量和函数分配内存后,代码执行阶段开始(代码逐行运行)。

第 1 行:var n=3, 3 值放入 n 标识符中。

第 2-5 行:没有要执行的操作。

line:6: 我们调用一个函数,现在函数是 JavaScript 的核心。该函数是一个小程序,每当一个新函数被一起调用时,都会创建一个新的执行上下文(在代码执行阶段)。它还包含两部分内存和代码执行阶段。内存分配给变量和函数(它涉及函数参数和其他变量)。

功能执行上下文的图示

分配内存后,代码执行阶段来到这里,函数内部的代码执行,undefined被实际值替换。

函数执行时执行上下文的图示

之后遇到return时将程序的控制返回到函数调用的地方,控制转到第6行,在本地内存中找到答案并返回控制三和三(未定义)的值替换为值ans 之后,整个事情被删除(执行上下文)。

代码执行后全球执行环境的图示

之后全局执行上下文被删除,我们的程序结束。还有一件事,JavaScript 处理所有删除和创建的内容(以管理执行上下文)它管理堆栈。它的名字叫 CALL STACK。它是一个维护执行顺序的堆栈。