首页 > 代码库 > JS作用域1

JS作用域1

-##1.什么是作用域##

任何一个编程语言都可以存储变量,并对变量的值进行修改,但是如何引入变量是一个问题,变量存储在哪里  如何找到变量。

为了更好的让我们找到这些变量的存储位置,和如何让程序找到变量,我们创建了一系列的规则,这些规则则被我们称为作用域;

###1.1 编译原理###

每一条代码执行前都会经历三个步骤 

    1. 分词/词法分析
    2. 解析/语法分析
    3. 代码生成


**分词/词法分析**

这个过程将会把字符组成的字符串代码分解为有意义的代码块,这些代码块我们称之为词法单元,例如:

    var a = 2;

这段代码将会被分解为 var、a、=、2、;。空格能否被当成词法单元取决于空格在代码中是否有意义;

**解析/语法单元**

这个过程则是将词法单元的集合变为一个由元素逐级嵌套组成的符合语法规则的树(我们称这个树为抽象语法树,简称为AST),例如

          var
         /
        x
       /
      =
     /
    2

**代码生成**

这个过程则是将我们所解析的树转化为可执行的代码,抛开各种语言的不同和平台不同,简单的来说就是将var a = 2的抽象语法树变为机器可读的指令,让机器创建一个a变量,并赋值为2;

**重点**

与其它的语言不同,js的代码并没有耗费大量的时间进行优化,因为js的编译并不是提前执行的,大部分的情况下代码的编译时间处于代码执行的前非常小的时间段内(几微秒甚至更短的时间内),所以任何js代码都会在执行前进行编译,而且通常都会在编译之后立刻执行

JS作用域1