码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript预编译

时间:2019-04-12 13:33:41      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:语言   java   div   ===   col   全局   语法分析   作用   过程   

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预编译

标签:语言   java   div   ===   col   全局   语法分析   作用   过程   

原文地址:https://www.cnblogs.com/xiaonongfu/p/10695277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!