这是全局范围内的严格模式(在 ES2015 中)

2024-01-03

有人可以指出 ES2015 标准中说明什么的地方吗?this在全局范围内以严格模式使用时必须引用?

我发现它等于window在我的 firefox 和 chrome 中,但不等于window在我的 Windows 7 x64 下的 IE11 中。

我能找到的标准中唯一相关的地方是ES2015 - ECMAScript 的严格模式 http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-of-ecmascript但它看起来很模糊并且没有明确说明。


ECMAScript 规范没有定义在特定的运行时环境中哪个对象应该是全局的。对于浏览器来说,这是由HTML5 规范 https://html.spec.whatwg.org/#global-object。有一些特殊的外壳window通过窗口代理 https://html.spec.whatwg.org/#windowproxy对象,但通常对于 javascript 来说应该是不可见的。

IE。即使顶级this !== window在浏览器脚本中,这不一定源于 ecma 规范属性或严格模式。它也可能源于 html 规范的定义,对于特定的脚本环境,全局应该是什么,或者该全局是否实际上等于<local variable bindings>.window.


你的问题的一个问题是你所说的全球范围。该规范有一个概念全局词汇环境 http://www.ecma-international.org/ecma-262/6.0/#sec-lexical-environments。但并非所有脚本体(源代码)都使用领域的全局词法环境作为其词法环境进行评估。

更复杂的是,脚本不仅可以在不同的词法环境中运行,而且还可以有多个realms它可以交互但又具有不同的全局变量。
这似乎不是问题,因为不同的代码领域(例如工作人员或浏览器窗口)主要通过小型 API 界面进行交互,但现实比这更复杂。例如。一个领域可以使用一个全局对象,该对象具有一个原型,该原型是另一个领域的全局对象的代理。在很多方面,它们看起来像是共享一个全局,但实际上并非如此,并且做类似的事情this == this.referenceToSelf可能会返回 false。这通常发生在 Firefox 中沙箱 https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.Sandbox用于运行插件/网络扩展/用户脚本。


一个反例,其中“顶级”this不是全局对象将是 es6 模块。

  • 抬头看this http://www.ecma-international.org/ecma-262/6.0/#sec-resolvethisbinding是迭代完成的通过向上遍历词汇环境链 http://www.ecma-international.org/ecma-262/6.0/#sec-getthisenvironment,检查其摘要HasThisBinding()财产
  • 模块有一个这个绑定 http://www.ecma-international.org/ecma-262/6.0/#sec-module-environment-records-hasthisbinding
  • 那个绑定returns undefined http://www.ecma-international.org/ecma-262/6.0/#sec-module-environment-records-getthisbinding
  • modules 以严格模式运行 http://strict%20mode%20code

所以存在严格模式代码,其中this在顶级词法中不是全局对象。

一个更简单的例子是在函数上下文中评估代码。它继承了this从函数。

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

这是全局范围内的严格模式(在 ES2015 中) 的相关文章

  • 禁用外部点击时关闭模式

    我正在制作一些使用模式的博客物质化 但我的模态 onclick 外部和错误数据有问题 这是我的代码 main js function changepassword var user userlog val var content conte
  • Javascript 闭包 - 变量范围问题

    我正在阅读 Mozilla 开发者网站上有关闭包的内容 我注意到在他们的常见错误示例中 他们有以下代码 p Helpful notes will appear here p p E mail p
  • React hooks 状态变量在重新渲染后未更新

    在下面的示例中 我有一个想要更新的元素 水果 数组 并使用更新后的数组执行其他操作 在本例中保存更新后的列表 我的理解是重新渲染状态将更新 但它不在这里 或者状态更新和我的操作之间存在延迟 In the addFruit功能我可以看到 Pe
  • 在 IE8 中使用 javascript __proto__

    你好 我在 javascript 中有这两个对象 var john firstname John lastname Smith var jane firstname Jane 这样做 jane proto john 我可以访问 Jane 的
  • 如何在 Lambda 中将对象上传到 S3?

    似乎无法将对象上传到 Lambda 中的 S3 本地一切正常 日志中没有错误可以显示出了什么问题 代码如下 console log Loading function var AWS require aws sdk var s3 new AW
  • 为什么 Jshint 在此 if 语句中说“变量已定义”?

    我有这个代码 if something is true var someVar true else var someVar false JsHint 表示在 else 语句部分 someVar 已被定义 这是为什么 我该如何解决 Thank
  • 获取 CRM 2011 中功能区按钮的 ID

    我创建了一个 JavaScript 我想在其中隐藏功能区Reactivate Lead按钮取决于某些条件 我通过在表单上按 F12 获得了按钮的 ID 即lead NoRelationship Form Mscrm Form lead Re
  • Mongoose 查询执行后回调函数从未被调用

    以下是我的代码 mongoose connect mongodb localhost mydatabase var db mongoose connection db on error console error bind console
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • 多次训练brain.js?

    在第一次训练后 如何将新信息 仅新信息 而不是所有信息 因为这会花费太多性能 训练到我的用 Brain js 制作的神经网络 它有点粗糙 但您可以使用以下结构来实现 如果我们加入 2 个训练数据集 旧数据集与新数据集 然后重新训练keepN
  • JS文件中的System.register是什么意思?

    在 Angular 2 中使用指令时 JS 文件中的 System register 是什么意思 我认为这个问题并不特定于 Angular2 中的指令 它是关于 ES6 TypeScript 和其他使用 SystemJS 的现代编译器的一般
  • 将 SVG 路径转换为绝对命令

    给定一个 SVG Path 元素 如何将所有路径命令转换为绝对坐标 例如 转换此路径
  • html 图像 src 调用 javaScript 变量

    这是我的代码 我想问 我怎样才能做到这一点 img src img apple 我一直在尝试使用 call 函数和 document onload 但它根本不起作用 有人可以救我吗 我假设你只是想用 javascript 更新图像 src
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • 在 Chrome 开发者工具中禁用调试器语句

    我正在尝试对恶意 JavaScript 进行逆向工程 当我最初加载侧面时 会注入 JS 代码 其中包括 debugger 语句并将断点注入我的 chrome 开发人员控制台 通过stackoverflow阅读 禁用所有断点does not帮
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 如何使用 NextJS 使用自托管字体face?

    使用 NextJS 的字体 我已经阅读了有关如何在 NextJS 中使用自托管字体的不同主题 我得到了什么 wait compiling 当我这样做时 font face font family montserrat src url myp
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • 如何从 Cloud Functions for Firebase 文件夹读取证书文件

    我正在尝试读取 certs 文件夹下的文件 如下所示 functions certs idp public cert perm 这是我用来读取文件的代码 fs readFileSync path join dirname certs idp

随机推荐

  • SPARQL 获取类或个体的所有属性

    我想要做的是从Individual1或从一个类获取属性列表 获取 某物 的所有属性 结果应该是这样的 对于 Secret Data Asset has Confidentiality Importance High Asset has Av
  • 使用 docker swarm 执行单个容器而不是“服务”

    我真的很喜欢拥有一组 docker 机器来执行 docker 服务的概念 我还喜欢单个 docker 容器所不具备的附加功能 例如 docker Secret 但我确实不需要长期服务 我的用例是简单地执行 bash 脚本 以使用 docke
  • JavaScript 静态类型检查的现状如何?

    我知道 Google Closure 编译器会进行类型检查 但是有没有其他替代方案 最好是不与库和优化器紧密耦合的替代方案 如果没有 有什么办法让Google Closure编译器only做静态分析 这里的静态分析是指定义参数的类型等 如果
  • 使用 MongoDB Java 驱动程序更新嵌入式文档中的字段?

    我正在尝试使用 Java 驱动程序对 MongoDB 中的嵌入式文档执行更新 但收到一个 IllegalArgumentException 指出 存储在数据库中的字段不能有 我的文档具有以下结构 id ObjectId 5155d102a4
  • 错误:之前应有“=”、“,”、“;”、“asm”或“__attribute__”

    是的 我知道这个问题以前已经被问过很多次了 但是我正在绞尽脑汁试图找出导致错误的原因 因为我无法识别通常丢失的分号在哪里 list h list h ifndef LIST H define LIST H define TRUE true
  • 从 Powershell 运行 R 脚本

    在批处理脚本中 我可以使用以下语法运行 R 脚本 Rterm exe quiet slave vanilla lt C some script R 不过 Powershell似乎为以后的扩展保留了 你可能应该看看Rscript而不是重定向
  • grails 将验证错误添加到 hasErrors

    我想知道如何向 hasErrors 方法添加自定义错误 以便 gsp 检测到错误 到目前为止我的代码 def recoverySetup new RecoverySetup params def onesolOrgkey OnesolOrg
  • '-[CIContext initWithOptions:]: 无法识别的选择器发送到实例

    我用它来生成一个大图像 let context CIContext options nil let bitmapImage CGImageRef context createCGImage image fromRect extent CGC
  • WordPress 插件内子页面的 url 解析

    假设我在 WordPress 中有一个页面 foo 这样 http www blah com foo 就会显示它 假设此页面的内容中有一个触发器 例如 现在有没有一种方法可以让插件知道它想要处理该类型的所有 urlhttp www blah
  • 在 Firebase 存储上复制文件?

    是否可以复制 Firebase 存储上的现有文件而无需再次上传 我需要它来设置我的应用程序的已发布 工作版本 Firebase Storage API 中没有方法可以为您已上传的文件创建副本 但 Firebase Storage 是建立在
  • 使用 Azul jdk 11 运行嵌入式 cassandra 时出现 AccessDeniedException

    我正在尝试使用 cassandra unit 库运行嵌入式 Cassandra蓝色 JDK 11使用 Gradle 项目并获取以下 AccessDenindException 我已经检查了权限build文件夹不是只读的 并且已经有一些文件
  • 选择不同的通知并准备更清晰的通知消息

    我已经创建了一个通知系统 它非常好 为了使其完美 还有一些事情需要改进 所以我就在这里 我正在开发的应用程序是一个用 PHP 编写的网站 我的通知有这个seen指示通知是否已签出的列 当用户单击与 Facebook 非常相似的通知下拉按钮时
  • 如何导入资源模块?

    今天我看到一个 python 文件以 import sys import time import heapq import resource from itertools import groupby from collections im
  • Heroku Rails Procfile

    我对 Heroku 很陌生 我将 Rails 应用程序上传到 Heroku 并希望使用 Thin 而不是 Webrick 来运行它 下列的Heroku 的指南 https devcenter heroku com articles rail
  • 带有 Flex SDK 的 Flash 组件

    我正在使用 Flex SDK 将 ActionScript 3 类编译为 swf 有些组件未包含在 SDK 中 例如 fl controls 组件 我有哪些选项可以访问闪存组件 我看到其他人提到我可以将它们导出到 Flash Pro 中的
  • Lua:加载文件后获取全局函数失败

    我正在尝试调用名为 test2 lua 的 lua 文件内的函数 这是test2 lua的内容 function abc path t table insert t a return t end 正如您所看到的 它需要一个输入并返回一个字符
  • Android:读取在 Google Drive 文件选择器中选择的文件

    在我的应用程序中 我需要读取一个设置文件 该设置文件可以位于本地存储中 也可以位于用户的 Google Drive 存储中 安装了 Google Drive 应用程序 下面打开一个文件选择器 首先询问用户要使用哪个文件选择器 包括使用 Go
  • 如何检索一个人的所有 GitHub 存储库列表?

    我们需要显示一个人在 GitHub 帐户上的存储库中的所有项目 如何使用特定人员的 git 用户名显示其所有 git 存储库的名称 您可以使用github API http developer github com v3 repos 为了这
  • 第二次加载谷歌地图片段时,膨胀视图上的空指针

    我正在使用 DrawerLayout 当我第二次加载谷歌地图片段时 异常将按预期被捕获 但是 当我尝试时 进一步采用相同的方法 Button btnShowList Button ui findViewById R id btnShowLi
  • 这是全局范围内的严格模式(在 ES2015 中)

    有人可以指出 ES2015 标准中说明什么的地方吗 this在全局范围内以严格模式使用时必须引用 我发现它等于window在我的 firefox 和 chrome 中 但不等于window在我的 Windows 7 x64 下的 IE11