JavaScript预编译

Posted xiaonongfu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript预编译相关的知识,希望对你有一定的参考价值。

javascript是一种解释性语言,一般说来说是解释一句就执行一句,但是其实并没有那么直观。

JavaScript执行分三步,

  第一步叫做语法分析。整体扫描一遍,看有没有少写一个大括号啥的,用了中文的标点符号啥的。但不执行。

  第二步叫做预编译。预编译发生在函数执行的前一刻。

    1. 预编译前奏

      ①imply global暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象(window)所有。如:

        a = 123;

        var a = b = 123;

      ②一切声明的全局变量也都归全局对象(window)所有。

        var a = 123; ===> window.a = 123;

    2. 1.函数预编译四部曲

      ① 创建AO(activation object),活跃对象,就是我们平时理解的作用域,专业一点就叫执行期上下文

      ②找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

      ③将实参值和形参统一

      ④在函数体里面找函数声明,值赋予函数体      

  第三步解释执行。

  比如:  

function text(a, b){
  console.log(a);
  c = 0;
  var c;
  a = 3;
  b = 2;
  console.log(b);
  function b(){}
  function d(){}
  console.log(b);
}
text(1);

  创建AO对象

  AO{

    a : undefined ==>1 ==>3

    b : undefined ==>function b(){} ==>2

    c : undefined

    d : undefined ==>function d(){}

  }

 

  然后是执行,执行过程,操作的还是预编译过程中创建的AO对象。

  AO{

    a : undefined ==>1

    b : undefined ==>function b(){}

    c : undefined ==>0

    d : undefined ==>function d(){}

  }

  所以结果应该是:1

          2

          2

全局预编译

  1.生成了一个GO(Global Object)对象,这个东西就是window。GO == window。

  

 

以上是关于JavaScript预编译的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript预编译

JavaScript的预编译和执行

JavaScript之预编译

浅谈JavaScript预编译原理

JavaScript之预编译学习(内含多个面试题) #yyds干货盘点#

JavaScript预编译学习