一般我们都不关心 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

读懂 ECMA 规格的更多相关文章

  1. 23.读懂 ECMAScript 规格

    读懂规格 读懂 ECMAScript 规格 概述 规格文件是计算机语言的官方标准,详细描述语法规则和实现方法. 一般来说,没有必要阅读规格,除非你要写编译器.因为规格写得非常抽象和精炼,又缺乏实例,不 ...

  2. 读懂 ECMAScript 规格

    概述 规格文件是计算机语言的官方标准,详细描述语法规则和实现方法. 一般来说,没有必要阅读规格,除非你要写编译器.因为规格写得非常抽象和精炼,又缺乏实例,不容易理解,而且对于解决实际的应用问题,帮助不 ...

  3. [转帖] 读懂YML文件.. 书买了还没看完...

    Copy From https://www.cnblogs.com/CloudMan6/p/8370501.html   读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技 ...

  4. 一文带你读懂什么是vxlan网络

    一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...

  5. 读懂UI设计的心理学

    好文转载,版权归原作者 作为UI设计师,对待用户就像对待婴儿,知道如何通过界面设计诱导用户非常重要,这就需要了解心理学方面的知识了.今天分享一篇日本设计师的好文,结合心理学与设计,教你读懂心理学,提高 ...

  6. 一文读懂UGC:互联网上的生态秘密

    转载自近乎: UGC(User- Generated Content)用户原创生产内容,它是相对于PGC(Professionally-produced Content)专业生产内容的一种内容来源,简 ...

  7. 读懂IL代码就这么简单(三)完结篇

    一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍 这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认 ...

  8. 读懂IL代码就这么简单(二)

    一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 ...

  9. 读懂IL代码就这么简单 (一)

    一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的,此言一出不明觉 ...

随机推荐

  1. 内部类不能有静态变量(除静态的对Static的理解)

    关于内部类(static与final) Static 不用实例化就能加载进内存 而内部类需要外部类实例化后才能加载进内存.这就间接造成static需要实例化了.与static不需要实例化语义矛盾 1. ...

  2. Linux操作:使用grep排除搜索的目录

    使用grep时,当一个目录下有一个包含很多文件的目录,但也不想搜索它,怎么办? 使用 --exclude-dir 选项. 单个目录示例: grep -rni 'http' --exclude-dir= ...

  3. 初阶sql注入总结

    0x00 前言 sql注入是通过用户输入构造语句以实现目的.一句话,不要相信任何用户输入的内容,做好防护. 0x01 传参方式 传参方式一般通过get方式,或者post方式提交,前者的优点是效率高,后 ...

  4. Github标星过万,Python新手100天学习计划。

    大数据文摘编辑部出品 作为目前最火也是最实用的编程语言,Python不仅是新手入门程序界的首选,也逐渐成为了从大厂到小厂,招牌需求list的必要一条. 当然,学Python这件事情,你可能也和文摘菌一 ...

  5. Python字符编码和转码

    一:Python2 python2默认编码格式是ascii码,解释器解释代码时会将代码以及代码中的字符串等转换成ascii码再执行.这样会导致字符串输出或传输时,与当前环境编码格式不同的话会显示乱码. ...

  6. intellij idea 新建springboot工程pom.xml报错

    今天使用idea新建的springboot工程pom.xml文件报错如下 1. 问题 'settings.xml' has syntax errors less... (Ctrl+F1) Inspec ...

  7. SpringBoot整合JavaWeb

    一.SpringBoot整合Servlet的两种方式 1.通过注解扫描完成Servlet组件的注册 编写Servlet package com.example.demo.servlet; import ...

  8. matplotlib 绘制正余弦曲线图

    1.普通风格 代码 import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 50)y1 = np.s ...

  9. 从0到1的开发,社交App 完成

    内容概要 GitHub链接:GitHub链接 客户端使用Android Studio 服务端使用IDEA + SpringBoot + MyBaits 完成功能 添加好友,即时聊天,社交广场 只是一个 ...

  10. Elasticsearch 报错:Fielddata is disabled on text fields by default. Set `fielddata=true` on [`your_field_name`] in order to load fielddata in memory by uninverting the inverted index.

    Elasticsearch 报错: Fielddata is disabled on text fields by default. Set `fielddata=true` on [`your_fi ...