做用域学习笔记(一)

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

1、人物关系

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


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


三、做用域
引擎的另外一位朋友,负责收集并维护全部生命的标识符组成的一系列查询,并实施一套很是严格的查询,肯定当前执行的代码对这些标识符的访问权限。作用域

2、对话

当咱们看到var a = 2;的时候,就会以为这是一个声明而已。编译器

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

3、分工合做

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


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


若是最终引擎找到了变量,就会将2赋值给他。不然引擎就会抛出一个异常,你这个找不到的啦!学习笔记


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

相关文章
相关标签/搜索