“这个"是怎么来的关键字工作? [英] How does the "this" keyword work?

查看:21
本文介绍了“这个"是怎么来的关键字工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我注意到,似乎没有明确解释 this 关键字是什么以及它如何在 Stack Overflow 网站上的 JavaScript 中正确(和错误)使用.

我目睹了它的一些非常奇怪的行为,但无法理解为什么会发生这种情况.

this 如何工作以及何时使用?

解决方案

this 是 JavaScript 中的关键字,是执行上下文的属性.它的主要用途是在函数和构造函数中.this 的规则非常简单(如果您坚持最佳实践).

规范中this的技术说明

ECMAScript 标准定义了this 通过抽象操作(缩写为AO)ResolveThisBinding:

<块引用>

[AO] ResolveThisBinding […] 使用 this 的绑定rel="nofollow noreferrer">运行执行上下文.[步骤]:

  1. envRec 成为 GetThisEnvironment().
  2. 返回?envRec.GetThisBinding().

全球环境记录模块环境记录函数环境记录每个都有自己的 GetThisBinding 方法.

GetThisEnvironment AO 找到当前的 运行执行上下文的 LexicalEnvironment 并找到最近的上升环境记录(通过迭代访问它们的 [[OuterEnv]] 属性)具有 this 绑定(即 HasThisBinding 返回 true).此过程以三种环境记录类型之一结束.

this 的值通常取决于代码是否在 严格模式.

GetThisBinding 的返回值反映了当前执行上下文的 this 的值,因此每当建立新的执行上下文时,this 都会解析为一个不同的值.当当前执行上下文被修改时,也会发生这种情况.以下小节列出了可能发生这种情况的五种情况.

您可以将代码示例放在 AST 资源管理器中,以了解规范详细信息.

1.脚本中的全局执行上下文

这是在顶层评估的脚本代码,例如直接在

当在脚本的初始全局执行上下文中时,评估 this 会导致 GetThisBinding 采取以下步骤:

<块引用>

全局环境记录的 GetThisBinding 具体方法 envRec […] [这样做]:

  1. 返回 envRec.[[GlobalThisValue]].

全局环境记录的 [[GlobalThisValue]] 属性始终设置为主机定义的 全局对象,可通过globalThis(窗口,Node.js 上的<代码>全局;MDN 上的文档).按照 InitializeHostDefinedRealm 的步骤了解 [[GlobalThisValue]] 属性是如何产生的.>

2.模块

中的全局执行上下文

模块已在 ECMAScript 2015 中引入.

这适用于模块,例如当直接在

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆