几乎所有的编程语言最基本的功能都是变量的存储和访问,正是这种变量的存储和访问的能力将状态带给了程序,而作用域的就是为了寻找和访问变量设计的一套规则。
理解作用域
在理解作用域前我们先来看一下程序的编译原理,大多数的程序的编译原理大概三个步骤:
分词/词法分析
这个过程会将有字符串组成的代码块,分解成一个一个的词法单元。例如var a = 2 ;
会被分解为var
,a
,=
,2
,;
解析/语法分析
这个过程会将分解的词法单元进行组合,组成一个抽象语法树林(AST,Abstract Syntax Tree)
代码生成
会将抽象语法树转换成转为可以执行的代码,转为一组机器指令进行执行
有了上面的编译原理,我们就可以看看如何把var a = 2;
这段代码如何在机器中进行解释
var a =2;
在分词后重组为AST,语言编辑执行分为两步
var a
编译器询问作用域中的a
变量,如果存在则返回变量地址,如果不存在则创建一个a
变量a =2
,在当前作用与中查询a
变量,如果存在则返回变量地址,否则则创建一个,将数值2存储到变量a
对应的地址中。