首页 > 语言 > JavaScript > 正文

实例讲解JavaScript预编译流程

2024-05-06 15:42:53
字体:
来源:转载
供稿:网友

大家都知道JavaScript是解释型语言,既然是解释型语言,就是编译一行,执行一行,那又何来预编译一说呢?脚本执行js引擎都做了什么呢?今天我们就来看看吧。

1-JavaScript运行三部曲

语法分析

预编译

解释执行

语法分析很简单,就是引擎检查你的代码有没有什么低级的语法错误; 解释执行顾名思义便是执行代码了; 预编译简单理解就是在内存中开辟一些空间,存放一些变量与函数 ;

2-JS预编译什么时候发生

预编译到底什么时候发生? 误以为预编译仅仅发生在script内代码块执行前 这倒并没有错 预编译确确实实在script代码内执行前发生了 但是它大部分会发生在函数执行前

3-实例分析

先来区分理解一下这2个概念: 变量声明 var ... 函数声明 function(){}

<script>var a = 1;console.log(a);function test(a) { console.log(a); var a = 123; console.log(a); function a() {} console.log(a); var b = function() {} console.log(b); function d() {}}var c = function (){console.log("I at C function");}console.log(c);test(2);</script>

分析过程如下:

页面产生便创建了GO全局对象(Global Object)(也就是window对象);

第一个脚本文件加载;

脚本加载完毕后,分析语法是否合法;

开始预编译 查找变量声明,作为GO属性,值赋予undefined; 查找函数声明,作为GO属性,值赋予函数体;

预编译

//抽象描述  GO/window = {    a: undefined,    c: undefined,    test: function(a) {      console.log(a);      var a = 123;      console.log(a);      function a() {}      console.log(a);      var b = function() {}      console.log(b);      function d() {}    }  }

解释执行代码(直到执行调用函数test(2)语句)

//抽象描述  GO/window = {    a: 1,    c: function (){      console.log("I at C function");    }    test: function(a) {      console.log(a);      var a = 123;      console.log(a);      function a() {}      console.log(a);      var b = function() {}      console.log(b);      function d() {}    }  }

执行函数test()之前,发生预编译
创建AO活动对象(Active Object);

查找形参和变量声明,值赋予undefined;

实参值赋给形参;

查找函数声明,值赋予函数体;

预编译之前面1、2两小步如下:

//抽象描述  AO = {    a:undefined,    b:undefined,  }

预编译之第3步如下:

//抽象描述    AO = {      a:2,      b:undefined,    }

预编译之第4步如下:

//抽象描述  AO = {    a:function a() {},    b:undefined    d:function d() {}  }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选