第一章 作用域是什么

对于JS来说,大部分情况下,编译发生在代码执行前的几微秒(甚至更短)的时间内。

1.2 理解作用域

var a = 2;

编译器在执行上面代码时候,都做了什么?

(1) 遇到 var a; 编译器会询问作用域,是否已经有一个该名称的变量存在于同一个作用域内,如果有,编译器会忽略声明,继续进行编译;否则,会在当前作用域内声明一个新的变量,并命名为 a;

(2) 接下来,编译器会为引擎生成运行时所需的代码,这些代码被用来处理 a = 2 这个赋值操作。引擎运行时,会首先询问作用域,在当前作用域内是否存在一个叫做a的变量,如果是,引擎就会使用这个变量。否则,引擎就会继续查找这个变量。

1.2.3 编译器有话说

我们回头看看上面的第二步,编译器会为引擎生成运行时所需的代码,接下来,引擎开始进行查找。可是,引擎会执行怎样的查找呢?

还是以 var a = 2 为例,

引擎会为变量a进行 LHS 查询,另外一个查找的类型是 RHS

这两个是什么意思?

LHS:L代表左侧,从左侧开始查找,即LHS查询是试图找到变量的容器本身,从而可以对其赋值。
RHS:R代表右侧,从右侧开始查找,即RHS查询就是简单的查找某个变量的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容