你不知道的js第一章笔记

1.1 编译原理

传统编译语言一般会经历以下三个流程:

分词/词法分析

生成词法单元

解析/语法分析

将词法单元转换成抽象语法树

代码生成

将抽象语法树转换成可执行代码

对于js来说,编译基本发生在代码执行前的几微秒的时间内,也就是在执行前编译,编译完马上执行。

1.2 理解作用域

首先是说处理代码的时候,有三个东西,分别是引擎、编译器和作用域。

首先编译器要先进行上一节说到的词法分析和语法分析,然后去作用域查询这个变量是否存在,然后为引擎生成执行代码

然后就遇到了LHS和RHS查询,查了一下就是left-hand-side和right-hand-side,就是左手边和右手边的意思。当变量出现在哪侧就执行哪侧的查询。
LHS就是查找变量容器本身,也就是赋值操作的目标是谁。
RHS就是简单的查找某个变量的值,也就是谁是赋值操作的源头。
如果查找的目的是对变量进行赋值,那么就会使用LHS查询;如果目的是获取变量的值,就会使用RHS查询。
LHS和RHS查询都会一层层的向上查找作用域,如果RHS不成功会抛出异常,如果LHS不成功,在非严格模式下会自动隐式的创建一个全局变量,严格模式下会抛出异常。

雯子 wechat
更多内容请关注我的公众号-雯子推