《一》ES6+ 中的新术语解析

理解ES6+中的执行上下文与词法环境
ECMAScript(ES)是JavaScript的规范,ES6和ES7分别代表2015年和2016年的标准。由于浏览器对ES6+支持不足,常使用Babel进行转译。JS执行过程涉及词法环境,包括环境记录和外部环境,处理var、let、const等不同类型的变量。全局环境记录由对象式和声明式环境记录组成,块级作用域仅影响let和const。代码块执行后,局部词法环境可能被垃圾回收。

ECMAScript(简称:ES)是 JavaScript 脚本语言的一种规范。JavaScript 是 ECMAScript 的一种实现。

ES6 也可以称为 ES2015,是指 2015 年发布的正式版本的语言标准。ES7 也可以称为 ES2016,是指 2016 年发布的正式版本的语言标准。以此类推。

在 ES6+ 中,对一些术语进行了新的描述。

目前浏览器对 ES6+ 的支持度不好,可以使用转译工具,比如 Babel,将 ES6 +最终编译为浏览器可识别的 ES5。

JS 代码的执行过程:

JS 代码的执行过程整体思路还是一样的。但是执行上下文关联的不再是 VO、作用域链和 this,而是词法环境(Lexical Environments)。词法环境由环境记录(Environemt Record)和外部的词法环境(Outer)两部分组成。

词法环境的类型:

词法环境(Lexical Environments)其实分为词法环境(LexicalEnvironment)和变量环境(VariableEnvironment)。VariableEnvironment 用于处理 var 和 function 声明的标识符;LexicalEnvironment 用于处理 lei、const 声明的标识符。

不同浏览器的实现不同,有的浏览器会将值进行一份拷贝,拆分开词法环境和变量环境;有的浏览器就直接实现为了同一个对象,使用的时候判断一下使用哪个引用来进行处理,如果是使用 VariableEnvironment 的话,就处理 var 和 function 声明的标识符,如果是使用 LexicalEnvironment 的话,就处理 lei、const 声明的标识符。

环境记录的类型:

环境记录具体分为两种类型:

  1. 声明式环境记录:用来定义直接将标识符与语言值绑定的 ES 语法元素,例如 let、const、class、module、import 以及函数声明等。
  2. 对象式环境记录:用来定义将标识符与某些对象属性相绑定的 ES 语法元素,例如 with 语句、全局 var 声明的变量、全局的函数等。
var name = 'Lee'
function foo() {}
let age = 18
// 代码块不会形成新的执行上下文,但是会形成新的词法环境
// 当执行到这一步时,全局执行上下文中的词法环境会指向当前代码块的词法环境
{
	var height = 1.88 // var 声明的变量没有块级作用域,因此会被加到全局环境记录中的对象式环境记录,代码执行完毕 height 也不会被销毁
	let address = '广州市'
}
// 代码块执行中的代码执行完毕,全局执行上下文中的词法环境指回全局的词法环境;代码块的词法环境没有再被引用到,被垃圾回收器回收

请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值