今天就简单记录下 var a = 2的时候发生了什么呢?

一、人物关系

1、引擎
从头到尾负责整个JavaScript程序的编译及执行过程。


2、编译器
引擎的好朋友,负责语法分析及代码生成等脏活累活。


3、作用域
引擎的另一位朋友,负责收集并维护所有生命的标识符组成的一系列查询,并实施一套非常严格的查询,确定当前执行的代码对这些标识符的访问权限。

二、对话

当我们看到var a = 2;的时候,就会觉得这是一个声明而已。

但我们的朋友们却不这么认为,引擎认为这里有两个声明,一个是编译器编译的时候处理的,一个是引擎运行处理的。

三、分工合作

1、编译器遇到 var a,编译器会询问作用域是否有一个该名称的变量存在同一个作用域。如果是,编译器就会忽略该声明,继续进行编译;否则它会要求作用域在当前域声明一个新的变量,并命名为a;


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


如果最终引擎找到了变量,就会将2赋值给他。否则引擎就会抛出一个异常,你这个找不到的啦!


本文是《你不知道的JavaScript》的学习笔记,文中举例非本人原创。


修行的苦行僧
89 声望4 粉丝