ch01作用域是什么
JS工作原理每一个细节的批判性思考会渗透到个人思考过程和日常工作中。知其然,也要知其所以然。
程序执行之前会经过三个步骤统称为编译。
细节上+++++
-
词法分析(Tokenizing/Lexing): 将字符组成的字符串分解为有意义的代码块
eg: var a = 2; ===》 分解为var、a、=、2 -
语法分析(Parsing):根据当前词法解析后的数组生成【抽象语法树(Abstract Syntax Tree】
-
代码生成:将抽象语法树(AST)转换为可执行代码(Excutable Code)
++++ 理解作用域 ++++
- 引擎:负责整个JS程序的编译和执行过程
- 编译器:负责语法分析和代码生成等工作
- 作用域:收集所有声明的标识符组成的一系列查询
代码案例解析:【var a = 2;】
引擎而言:var a = 2; 可以分为两个完全不同的声明,【编译器在编译时处理】&【引擎在运行时处理】
作用域:一系列变量的访问规则
=> 细节上
- 编译器首先对var a;进行处理,会判断当前作用域集合中是否已经存在一个a的变量,如果有则忽略该声明继续编译否则会在当前作用域集合中重新声明一个新变量:a
- 编译器为引擎生成运行时代码,之后引擎会在当前作用域集合中查找是否存在a的变量如果有则使用这个变量如果没有则继续向上查找该变量,最终没有的话会抛出一个异常!!
- 如果引擎在作用域集合中查找到a变量则将2赋值给该变量。
总结:
JS中变量的赋值会存在两个过程。
1. 编译阶段:编译器会在当前作用域中查找是否存在这个a变量如果没有则声明如果有则复用
2. 运行阶段:引擎会在当前作用域集合中查找这个a变量如果存在则将2赋值给a如果没有沿着作用域链查找直到没有找到就会爆出异常⚠
学而不思则罔,思而不学则殆!

浙公网安备 33010602011771号