全局执行上下文是否可以从执行堆栈中弹出?

2023-12-29

当JS代码开始运行时,全局执行上下文被创建并位于执行堆栈的底部,以“容纳”全局变量对象和'this'。 如果整个JS代码运行完后执行栈为空,并且没有全局执行上下文,我们如何仍然能够访问全局变量(例如,我正在运行一个带有 JS 代码的 html 文件,完成后我仍然可以通过 Chrome 控制台看到全局变量的值...)或how this仍然指向全局对象(不应该有任何'this'如果没有任何执行上下文!)?

我可以给自己的唯一解释是全局执行上下文永远不会离开执行堆栈;它一直在那里,直到我决定关闭浏览器窗口. 我说得对还是不对?

而且,在异步回调的情况下,当一个事件从事件队列中出来并进入JS引擎运行时,执行栈中到底发生了什么?回调的执行上下文是否位于该堆栈的底部,或者全局执行上下文是否仍然存在?

有一个类似的题目JavaScript 中初始全局执行上下文是否从调用堆栈中弹出? https://stackoverflow.com/questions/29879525/is-the-initial-global-execution-context-ever-popped-off-the-call-stack-in-javasc;但是,它并没有回答我的问题。

谢谢


当整个代码运行时,执行堆栈变空。

我们如何仍然能够访问全局变量?

即使没有执行任何代码全局词汇环境 http://www.ecma-international.org/ecma-262/5.1/#sec-10.2.3全局对象仍然存在。当您将一些代码输入 chrome 控制台时,代码正在被评估,一个新的全局执行上下文 http://www.ecma-international.org/ecma-262/5.1/#sec-10.3 is 正在创建并初始化 http://www.ecma-international.org/ecma-262/5.1/#sec-10.4.1.1其词汇和变量环境设置为全局环境并且this绑定到全局对象。然后您的代码在此上下文中执行,并且执行堆栈再次变空。

how this仍然指向全局对象?

每次使用全局代码初始化新的全局执行上下文时,this绑定到全局对象。

如果是异步回调,当一个事件从事件队列中出来并进入JS引擎运行时,执行栈中到底发生了什么?

再次创建一个新的全局执行上下文并将其推送到空执行堆栈上。在MDN https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop#Queue这与中描述的术语略有不同ECMAScript 规范 http://www.ecma-international.org/ecma-262/5.1/:

当堆栈为空时,从队列中取出一条消息并进行处理。处理过程包括调用相关函数(从而创建初始堆栈帧)。当堆栈再次变空时,消息处理结束。 (MDN。并发模型和事件循环 https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop#Queue)

这里“堆栈帧”表示“执行上下文”,“初始堆栈帧”对应“全局执行上下文”。

回调的执行上下文是否位于该堆栈的底部,或者全局执行上下文是否仍然存在?

没有一个。堆栈是空的。并且仅当它为空时,才会从回调/事件队列中获取最旧的回调:

当没有正在运行的执行上下文并且执行上下文堆栈为空时,ECMAScript 实现会从作业队列中删除第一个 PendingJob,并使用其中包含的信息创建执行上下文并开始执行关联的 Job 抽象操作。ECMAScript 6.0 规范 http://www.ecma-international.org/ecma-262/6.0/#sec-jobs-and-job-queues

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全局执行上下文是否可以从执行堆栈中弹出? 的相关文章

  • 上传到google脚本中的特定文件夹

    所以我想制作一个表单 将文件 照片 视频上传到 Google Drive 中的特定文件夹 文件 照片 视频 但我不知道如何在 Google Apps 脚本中制作 我尝试了这样的操作 并在控制台中出现错误 无效的参数侦听器 所以这里有一个索引
  • 今天(儒勒·凡尔纳)的 Google 涂鸦是如何运作的?

    相信很多人都已经看过今天的了 2011 02 08 谷歌的涂鸦 http www google com logos verne html 如果涂鸦发生变化 请链接到 CNN 上的文章 http edition cnn com 2011 TE
  • AngularJS 仅在解析时返回两个 http get 请求

    我有一个 Angular 应用程序 在控制器中我需要调用一个发出两个 http get 请求的函数 并且我需要这个函数在解析这些值时返回这些值 我无法在 routeProvider 中解析它们 因为此函数需要在同一控制器中获取值 我展示了控
  • 从 javascript 调用 HttpHandler

    我有一个简单的页面 带有通过 JavaScript 调用 HttpHandler 的按钮 HttpHandler 获取大量文件并将它们添加到 zip 文件中 完成工作后 zip 文件将添加到 Response 中 此操作可能需要几分钟时间
  • 如何使用 jQuery 检查文件输入大小?

    我有一个具有文件上传功能的表单 如果用户尝试上传的文件太大 我希望能够有一些不错的客户端错误报告 是否有一种方法可以使用 jQuery 检查文件大小 或者纯粹是在客户端上或以某种方式将文件发送回服务器进行检查 您实际上无权访问文件系统 例如
  • 如何使用 Angularjs 检查模块中的指令或控制器是否可用

    在 angularjs 中 给定一个模块 如何检查给定一个模块是否存在指令 控制器 我有一个模块 我想知道是否已加载某些特定指令 下面是一些示例代码 var module angular module myModule check if c
  • 在 HTML5 中堆叠多个画布

    我试图使用相互堆叠的四块画布 但除了顶部画布的内容外 它们的内容不会显示 我按照我希望它们显示的顺序将 z index 值放入其中 但只有最上面的一个显示内容 它们的位置是绝对的 z 索引是 1 2 3 和 4 是否还有其他原因导致它们不显
  • 查找第一个可滚动父级

    我遇到这种情况 需要将元素滚动到视口中 问题是我不知道哪个元素是可滚动的 例如 在纵向中 主体是可滚动的 而在横向中 它是另一个元素 还有更多情况会更改可滚动元素 现在的问题是 给定一个需要滚动到视口中的元素 找到其第一个可滚动父元素的最佳
  • 如何使 CSS 样式覆盖 JavaScript 应用的样式

    我动态创建一个 HTML 表 并应用一些样式 var tbl document createElement table tbl id CrewMemberTable document getElementById CrewMemberPan
  • 指令可以从父作用域中删除自身吗

    假设我有以下代码 div div div div 我的自定义指令有一个独立的范围 定义为 app directive customDirective function log return restrict E templateUrl te
  • ChartRangeFilter 作为谷歌时间轴图表的缩放功能,可使用数据视图从专用谷歌电子表格中读取数据

    我的目标是整合Whitehat 提供的这种缩放功能 https stackoverflow com questions 49306638 google timeline visualization dont change series ro
  • 根据每个选项的值或 ID 过滤选择框

    我想使用jquery来过滤表单中的所有选择框 例如 在第一个选择框中 如果我选择 仅显示1 我想过滤所有选择元素中的所有选择选项 以隐藏值不包含 1 的任何选项 仅应显示带有 1 的产品值 如果选择 Filter 选项 则所有选择框的默认值
  • 将焦点和光标设置到文本输入字段/字符串 w 的末尾。 Jquery [重复]

    这个问题在这里已经有答案了 我有以下函数 将选择器添加到搜索输入作为高级选项 就像堆栈溢出高级搜索一样 当您单击要搜索的内容时 它会添加一个前缀 请参阅下面的 Jquery
  • 如何在不知道id的情况下从内页获取父iframe元素?

    让我们想象一下我有这样的东西 div div test html 是空页面 自定义hash属性始终具有不同的值 出于安全原因两个页面位于同一域 iframe 元素的数量和顺序是随机的 我的问
  • 用 JavaScript 改变文本颜色?

    我想在单击按钮时更改标题的颜色 这是我的代码 但它不起作用 我不明白为什么不 var about function init about document getElementById about innerHTML about style
  • 在单页应用程序上重用 Google Maps API 实例

    假设我有一个单页应用程序 Angular JS 应用程序 并且我在元素 id 上绘制一个 Google 地图实例googleMap var mapInstance new google maps Map document getElemen
  • Magnific Popup:来自span的源标题

    我想从锚标记内的隐藏标题字段中获取放大图像的标题 而不是从标题中获取 这是因为我的标题包含标记 HTML a href img zoom jpg img src img small jpg alt span class hide This
  • React:设置 State 或设置 Prop 而无需重新渲染

    Problem 目前 我有一个LoginForm具有 成功 处理函数的组件handleOnSuccess 然后将其链接到父组件onTokenUpdate由 令牌更新 处理函数定义的属性handleUpdateToken 问题是setStat
  • HighCharts - 两个 Y 轴,一个具有最大值

    我在使用 Highcharts 时遇到问题 我已将右 Y 轴设置为 min 0 和 max 100 它是 但它不起作用并生成 125 百分比 怎么了 http jsfiddle net SdTcU http jsfiddle net SdT
  • 在 JSON 对象中存储和发送原始文件数据

    我正在寻找一种方法来传输任何文件类型的原始文件数据和任何可能的内容 我的意思是文件和文件内容都是用户生成的 在 Backbone 前端中使用 xhr ajax 调用两种方式针对 Django 后端 编辑 也许问题仍然不清楚 如果您在 IDE

随机推荐

  • python中有序字典的有序字典

    我需要一个存储字典的字典数据结构 如下所示 custom 1 a np zeros 10 b np zeros 100 2 c np zeros 20 d np zeros 200 但问题是我在代码中多次迭代这个数据结构 每次迭代它时 我都
  • 无法获取用于gunicorn 的访问日志

    我在 nginx 后面运行 Gunicorn 我想将gunicorn 中的错误记录到gunicorn error log 并将访问日志记录到gunicorn access log 我的错误日志有效 但访问日志无效 我做错了什么 这是我的gu
  • Keras 准确率停留在 50%

    Code import numpy as np from keras preprocessing image import ImageDataGenerator from keras models import Sequential Mod
  • 如何调用类的析构函数?

    我有一个简单的 C 代码 但我不知道如何使用析构函数 class date public int day date int m day m date cout lt lt I wish you have entered the year n
  • setMaximumFractionDigits 的问题

    setMaximumFractionDigits 不适用于以下代码 NSString input 80 90 NSNumberFormatter numberFormatter NSNumberFormatter alloc init nu
  • 在傅立叶插值的上下文中返回函数的“传统”符号

    在数值分析中 我们学生有义务在 R 中实现代码 给定函数 f x 找到其傅立叶插值 tN x 并计算插值误差 f x t N x int 0 2 pi f x t N x 2 或各种不同的 N 我首先尝试根据以下公式计算 d 系数 d fr
  • C#:实时组合框更新

    我一直在尝试将文本文件加载到组合框中 然后创建一个按钮将我在组合框中所做的任何更改保存回文本文件 问题是 当我在组合框中输入某些内容时 所选的 项目 不会更新 我可以更改句子 但是一旦单击 保存 按钮 这也会更新组合框 它就会回到我编辑之前
  • 以 root 身份启动 Mysql

    我已经以 root 身份在我的测试服务器上启动了 mysql 我已经添加了 user root my cnf 中的行 由于我希望测试服务器升级到生产服务器 因此我想注释掉这一行并重新启动 有没有什么副作用 预期数据丢失 MySQL 的 ro
  • 出现错误:没有为一个或多个必需参数给出值

    下面是我的更新查询 它工作正常 但是当我添加时int DrId在参数字段 最后 检查条件条件 在此之后它向我显示以下错误 No value given for one or more required parameters 错误在哪里 因为
  • Node.js 在 openshift 中的部署

    我试图将 Node js 应用程序部署到 openshift 如此链接所示here http myapp jeewan rhcloud com 我理解这段代码 var http require http var server http cr
  • Sqlalchemy 如果表不存在

    我编写了一个模块 用于创建一个空数据库文件 def create database engine create engine sqlite myexample db echo True metadata MetaData engine me
  • 使用 RxJava 的状态机?

    我正在尝试全力以赴地使用 RxJava 并解决我遇到的这个问题 但它似乎非常不适合它 因为 RxJava 似乎不想处理任何类型的状态 而只是传递事件并改变它们来处理它们 我尝试用 RxJava 模拟的基本状态机行为是这样的 在应用程序启动事
  • 无法使用nodemailer发送html文本

    我无法使用 nodemailer 在邮件中发送 html 文本 exports send function req res console log req query var mailOptions to req query email s
  • 检查服务器上是否存在文件

    我正在尝试检查服务器上是否存在 ASP NET 网页后面带有 C 代码的文件 我知道该文件确实存在 因为我事先用一段代码将其放在服务器上 任何人都可以看到为什么找不到该文件 这是代码 wordDocName specifications C
  • Google Contacts API asp.net 设置和授权令牌

    是否有任何好的示例展示如何填写应用程序设置来创建请求设置 这是代码google https developers google com google apps contacts v3 using Google Contacts using
  • Python 中是否缓存了常量计算?

    假设我在 Python 中有一个函数 它使用一个常量计算的浮点值 如 1 3 def div by 3 x return x 1 3 如果我重复调用该函数 是否会自动缓存 1 3 的值以提高效率 或者我必须手动执行以下操作 def div
  • 创建主从表和对话框,如何重用相同的对话框来创建和编辑

    我正在尝试创建一个对话框 该对话框将用于创建对象和更新对象 因此 如果我碰巧单击 新建 按钮 我将看到一个包含要填充的空字段的对话框 或者如果我单击某个条目的编辑按钮 该条目的数据将显示在对话框中进行更新 按照 primefaces 展示版
  • 如何定义向量结束以便它不会无休止地继续下去?

    目前我有一个文本文件 其中包含与不同音乐剧艺术家有关的信息 David Byrne 1 Talking Heads Lead Vocals Chris Frantz 1 Talking Heads Drummer Tina Weymouth
  • 大多数现代系统中堆栈增长的方向是什么?

    我正在准备一些 C 语言培训材料 我希望我的示例适合典型的堆栈模型 Linux Windows Mac OSX PPC 和 x86 Solaris 和最新的 Unix 中的 C 堆栈朝什么方向发展 堆栈增长通常并不取决于操作系统本身 而是取
  • 全局执行上下文是否可以从执行堆栈中弹出?

    当JS代码开始运行时 全局执行上下文被创建并位于执行堆栈的底部 以 容纳 全局变量对象和 this 如果整个JS代码运行完后执行栈为空 并且没有全局执行上下文 我们如何仍然能够访问全局变量 例如 我正在运行一个带有 JS 代码的 html