读懂 ECMA 规格
一般我们都不关心 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 规格的更多相关文章
- 23.读懂 ECMAScript 规格
读懂规格 读懂 ECMAScript 规格 概述 规格文件是计算机语言的官方标准,详细描述语法规则和实现方法. 一般来说,没有必要阅读规格,除非你要写编译器.因为规格写得非常抽象和精炼,又缺乏实例,不 ...
- 读懂 ECMAScript 规格
概述 规格文件是计算机语言的官方标准,详细描述语法规则和实现方法. 一般来说,没有必要阅读规格,除非你要写编译器.因为规格写得非常抽象和精炼,又缺乏实例,不容易理解,而且对于解决实际的应用问题,帮助不 ...
- [转帖] 读懂YML文件.. 书买了还没看完...
Copy From https://www.cnblogs.com/CloudMan6/p/8370501.html 读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技 ...
- 一文带你读懂什么是vxlan网络
一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...
- 读懂UI设计的心理学
好文转载,版权归原作者 作为UI设计师,对待用户就像对待婴儿,知道如何通过界面设计诱导用户非常重要,这就需要了解心理学方面的知识了.今天分享一篇日本设计师的好文,结合心理学与设计,教你读懂心理学,提高 ...
- 一文读懂UGC:互联网上的生态秘密
转载自近乎: UGC(User- Generated Content)用户原创生产内容,它是相对于PGC(Professionally-produced Content)专业生产内容的一种内容来源,简 ...
- 读懂IL代码就这么简单(三)完结篇
一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍 这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认 ...
- 读懂IL代码就这么简单(二)
一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 ...
- 读懂IL代码就这么简单 (一)
一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的,此言一出不明觉 ...
随机推荐
- Bootstrap导航栏示例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 数据库系列(五)之 mysql的伸缩性
这篇文章,主要讲述mysql的伸缩性.在国内mysql一直都是使用得最多的数据库,在国外也排名前三.mysql是一款开源的.性能较高的数据库. 伸缩性是指在软件设计中,软件(数据库.应用程序)通过特定 ...
- PHP查询附近的人及其距离的实现方法
1.附近的人 //获取该点周围的4个点 $distance = 1;//范围(单位千米) $lat = 113.873643; $lng = 22.573969; define('EARTH_RADI ...
- 一文搞定PGA_LGA_BGA
概述 什么是LGA.PGA.BGA类型的封装?众所周知,CPU封装的类型主要为三种:LGA,PGA,BGA,其中LGA封装是最常见的,intel处理器都是采用这种类型的封装,而PGA封装则是AMD常用 ...
- Linux的DNS反向解析部署
下面的部署是在Linux的DNS正向解析示例上进行修改的. 如果有什么问题或者错误,可以访问上篇帖子 下面开始有关DNS的服务部署.<DNS反向解析> 工具:虚拟机 centos7 配置: ...
- 在K8S集群中使用busybox-dig镜像,来作DNS解析分析
以前,判断K8S里的DNS功能是否正常时,得想很多办法. 如果有了busybox-dig镜像,则作这事就简单多了. 如下命令,直接部署 kubectl run busybox -it --image= ...
- centos7下搭建JDK和Hadoop
涉及基础操作命令 这里只是将涉及到的提了下一下具体的使用还需要读者自己查阅资料 tar 解压命令 su 进入root用户模式 rm -rf 删除 cd /文件名/.../ 进入某个文件夹下 注意要逐层 ...
- Caused by: java.lang.ClassNotFoundException: Cannot find class:
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibat ...
- vue-cli3和ts建立vue项目
第一步,如果你之前没有装vuecli,可以直接执行下面命令 npm install --global @vue/cli 注:这里我install 的时候不成,于是我用的是 cnpm install - ...
- dfs的两种处理方法
方法一: 对于源点s,初始化vis[s]=1,并且在dfs之后vis[s]=1,为下一次调用做准备 .对于dfs递归中的寻找后继的循环体,入栈出栈语句写在循环内. 模板: //调用 vis[s]=; ...