javascript中的执行上下文

举报
搞前端的半夏 发表于 2022/05/31 23:50:36 2022/05/31
【摘要】 什么是执行上下文?执行上下文就像一个盒子或容器,在其中执行 javascript 代码。执行上下文由内存组件和代码组件两部分组成。在内存组件中,内存与代码一起分配给所有变量和函数,并且它们作为键值对存储在内存中。内存组件也称为变量环境。在代码组件中,代码一次执行一行。它也被称为执行线程。一旦函数的代码被执行,该函数(被调用)的执行上下文就会从调用堆栈中弹出或删除。我们可能有多个函数,因此会...

什么是执行上下文?

执行上下文就像一个盒子或容器,在其中执行 javascript 代码。执行上下文由内存组件和代码组件两部分组成。在内存组件中,内存与代码一起分配给所有变量和函数,并且它们作为键值对存储在内存中。内存组件也称为变量环境。在代码组件中,代码一次执行一行。它也被称为执行线程。一旦函数的代码被执行,该函数(被调用)的执行上下文就会从调用堆栈中弹出或删除。我们可能有多个函数,因此会有多个执行上下文,因此为了跟踪执行上下文的顺序,使用了调用堆栈。当一个javascript程序被执行时,然后创建一个全局执行上下文。在调用堆栈的底部,在整个 javascript 代码执行完毕后,全局执行上下文会从调用堆栈中弹出或删除。

空白图表.jpeg

让我们考虑一个例子:

let num = 5
function example (a){
    let ans = a + a;
    return ans;
};

let sum = example(num);

JS引擎做的第一件事就是遍历整个程序并创建一个变量环境(或内存组件)并将变量存储在代码的第一行并为变量’num’分配内存空间。然后它转到下一行并将内存空间分配给函数“example”。同样,它为变量“sum”分配内存空间。

在分配内存时,对于变量“num”和“sum”,它将 undefined 存储在其内存空间中,而对于函数“example”,它将函数的主体作为键值对存储在其内存空间中。

图像.png

当调用函数时,会创建函数的执行上下文,其中有内存和代码组件。

图像.png

因此,创建了函数示例执行上下文,并将内存分配给函数的所有变量和参数,如上所示。现在,只要从函数返回值,执行控制就会返回到调用函数的位置,即第 7 行,并且函数示例的执行上下文会从调用堆栈中弹出或删除,如下所示。

图像.png

并且使用返回的值初始化总和。代码执行完成后,全局执行上下文(或匿名)也会从调用堆栈中删除。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。