一般我们都不关心 ECMA 规范,只需要学习怎么使用就好了。但有时候遇到一些难以解释的问题/现象,就不得不看一下规范是如何要求实现的了。规范内容庞杂,理解其中的术语有利于我们快速看懂规范。

Environment

环境指定了标识符在表达式中的意义。譬如当谈论表达式 x + 1 时,如果不指明 x 所在的环境,那么这个表达式就毫无意义。为我们熟知的环境有:全局环境,函数的局部环境。

注意,环境类似作用域(Scope),不过作用域是 ES5 之前的概念。

Lexical Environments

词法环境是一个规范类型,用于定义特定变量和函数标识符在 ECMAScript 代码的词法嵌套结构上的关联关系。一个词法环境由一个环境记录项和可能为空的外部词法环境引用构成。

Execution Contexts

执行上下文是一个抽象的规范概念,解释器用它来追踪 ECMAScript 代码的运行时求值。在代码执行过程中,可能会出现多个执行上下文,但运行的执行上下文最多只有一个。为了管理执行上下文,我们引入了执行上下文栈,处于栈顶的那个元素就是运行的执行上下文。

当解释器遇到函数、块语句、Catch从句时,都会创建一个新的执行上下文后压入执行上下文栈,成为运行时执行上下文。

主要介绍执行上下文包含的如下属性:

  • VariableEnvironment 持有在这个执行上下文内, var 声明标识符绑定。
  • LexicalEnvironment 保存在这个执行上下文内,不属于 VariableEnvironment 的其他标识符绑定。

LexicalEnvironment 和 VariableEnvironment 都是词法环境。

函数声明比较特别,它可以存在于上面两种环境中的任一种,这取决于函数所在的环境。在 Module 环境下,函数声明作为词法声明保存在 LexicalEnvironment。在其他情况下保存在 VariableEnvironment 内。

Record 和 field

ES6 规格将键值对(key-value map)的数据结构称为 Record,其中的每一组键值对称为 field。这就是说,一个 Record 由多个 field 组成,而每个 field 都包含一个键名(key)和一个键值(value)。

为了方便理解,我们可以将一个 Record 看做一个对象({})。

identifier binding

标识符绑定,将一个标识符和对应的值(数字、函数、对象等)绑定在一起。一个标识符不仅可以被绑定,也可以被解除绑定。如果一个标识符与一个对象绑定在一起,它便引用了这个对象,通过这个标识符就可以去访问和修改那个对象。

白话版:将值赋值给标识符

在 javascript 中,标识符绑定是按值传递的。

identifier resolver

标识符解析,指在运行的执行上下文中的词法环境里,通过标识符获得其对应绑定的过程。这一过程和原型链查找类似。

白话版:获取标识符的值

closure

闭包是一个组合,由代码块和代码块创建时所在的词法环境组成,是一个可以自己拥有独立的环境与变量的的表达式(通常是函数)。

在 es6 中,所有函数都是闭包。why?

evaluate

计算、求值、运行,根据上下文而定

其他

http://es6.ruanyifeng.com/#docs/spec

转载于:https://www.cnblogs.com/fayin/p/11389946.html

读懂 ECMA 规格相关推荐

  1. 一文读懂字符编码(ASCII、ISO 8859、GB系列、Unicode)

    一文读懂字符编码(ASCII.ISO 8859.GB系列.Unicode) 一.字符编码相关组织 1.1 ANSI 美国国家标准学会 1.2 Ecma 国际 1.3 ISO/IEC 1.4 统一码联盟 ...

  2. 一文读懂JS继承相关知识点

    一文读懂JS继承相关知识点 Javascript 面向对象编程(一):封装 一. 生成实例对象的原始模式 二. 原始模式的改进 三. 构造函数模式 四.构造函数模式的问题 五. Prototype模式 ...

  3. 一文彻底读懂物联网关键技术之——ZigBee!

    一文彻底读懂物联网关键技术之--ZigBee! 本文采用问答形式向你详细地介绍了方方面面,不夸口的说,你所需要知道的关于 ZigBee的一切,在这里基本可以了解到! 在智能硬件和物联网领域,时下大名鼎 ...

  4. java公路车几何有问题_教你读懂公路车架几何

    文:Lurker  编辑:Simon 随着国内公路车运动的逐渐升温,很多车友慢慢意识到挑选一台公路车除了看配置和传统上的尺寸之外,也注意到需要关心这款车架的几何尺寸.而对一些相对专业.学习面广的车店来 ...

  5. 一文读懂阿里云网络 2020 云栖大会新品发布

    凌云时刻 · 极鲜速递 导读:阿里云网络新品来袭! 来源 | 洛神云网络技术 前言 企业上云,网络先行.在 2020 云栖大会上,阿里云基础产品事业部网络产品团队负责人祝顺民宣布了云网络一系列新品发布 ...

  6. 【观察】以原生为根,以安全铸魂,三个维度读懂PKS原生云

    申耀的科技观察 读懂科技,赢取未来! 站在今天看过去,每一次技术的创新,都可能是一场"蝴蝶效应"的开始,如同苹果引领了智能机时代,安卓系统让移动互联网爆发,Uber带出共享经济创业 ...

  7. 一文读懂基于PN532和S50的NFC开发

    基于PN532和S50的NFC开发 1. NFC概述 NFC(Near Field Communication)近场通信,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体 ...

  8. 一本书读懂财报-1.资产负债表(笔记)

    1. 为什么要做财务报表 财务报表的作用是,描述一个企业的经济活动. 企业经济活动包括: 经营活动:生产产品.销售产品.回收货款: 投资活动:如果一个企业想到一个新的地区开展业务,想进入一个新的业务领 ...

  9. 一文读懂Bakkt:加密货币的纽交所

    在上周于纽约证券交易所举办的Bakkt数字资产峰会上,全球150多名投资者达成了共识:已经有许多的机构投资者和风险投资家准备好了将传统资产带入加密货币的世界. 这个共识,也正是维港投资等全球顶级投资机 ...

最新文章

  1. 《Photoshop Lab修色圣典(修订版)》—第1课1.7节言归正传
  2. 使用java spring开发ckeditor的文件上传功能(转)
  3. mysql修改索引对交易影响吗_MySQL中字符串索引对update的影响分析
  4. TeaPot 用webgl画茶壶(3) 环境纹理和skybox
  5. Hadoop入门(三)HDFS API
  6. 在单文档中显示我的第一个对话框
  7. 音频特效:Delay 和 Vibrato
  8. Qt4_中央窗口部件
  9. [转]Windows Shell 编程 第八章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987961】...
  10. 简单打印-双排标签102*30模板设计
  11. Excel POI 导入导出(支持大数据量快速导出)
  12. Java编程思想第十章内部类的10.7至10.8小节的笔记和练习题
  13. 开机引导界面grub找不到
  14. 在LR字符串中交换相邻字符
  15. 2017第48周日昨天休息
  16. Ubuntu22.04安装惠普P1108打印机并在局域网内共享
  17. 手机IMEI串码获取
  18. android显示器,古董 or 真香? ThinkVision 28: 28'' 4K Android 显示器开箱
  19. 10年后重温《我奋斗了18年才和你坐在一起喝咖啡》
  20. 如何查询计算机已连接wife的密码错误,电脑已经连上无线如何查看WIFI密码

热门文章

  1. cv练习:看图说话(Image Captioning)--1
  2. linux gvim 配置文件,Gvim一些基本配置
  3. 切比雪夫不等式及其证明
  4. python对txt文本的截取和写入
  5. 格林尼治时间的终止时间
  6. 「机器视觉」学习笔记 - Thresholding Techniques- 图像阈值
  7. 【Java实战】Java实现简易音乐播放器
  8. 计算机网络:C/S和B/S两种模式
  9. 当当疯了!3折...
  10. 申宝在线炒股大盘探底回升反弹或将出现