美文网首页
javascript预编译机制

javascript预编译机制

作者: luguilun | 来源:发表于2019-04-04 10:09 被阅读0次

预编译的两种情况
全局:

1.全局 直接是script标签中的代码,不包括函数执行
执行前:
1.首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析
2.分析变量声明,变量名为属性名,值为undefined
3.分析函数声明,函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖

函数内部(局部):

  1. 函数调用,也是会生成自己的作用域(AO:active object),AO活动对象. 函数调用时候,执行前的一瞬间产生的,如果有多个函数的调用,会产生多个AO

1.1. 函数执行前的一瞬间,生成AO活动对象
1.2 分析参数,形参作为对象的属性名,实参作为对象的属性值
1.3. 分析变量声明,变量名为属性名,值为undefined,如果遇到AO对象上属性同名,不去做任何改变,
注意!!!
如果变量名与形参名相同,变量不会覆盖形参,是以形参为准。
例1

console.log(test); ---->   **输出函数体**
 function test(test){
     console.log('test='+test); ----> **输出undefined**
      var test = 123;
 }
test();

例2

console.log(test); ---->   输出函数体
 function test(test){
     console.log('test='+test); ----> *输出10*
      var test = 123;
 }
test(10);
1.4 分析函数声明,函数名为属性名,值为函数体,如果遇到AO对象上属性同名,则无情覆盖
  1. 逐行执行

总之:不管全局还是局部,都是先预解析声明变量,其次是声明函数。
需注意的就是:
当解析函数声明时与变量同名则无情覆盖。
函数内的形参与变量同名,以形参为准;
赋值函数(即变量=一个匿名函数)是属于变量声明;

综合练习例子

<script type="text/javascript">
     console.log(test);
     function test(test){
         console.log(test);
         var test = 123;
         console.log(test);
         function test(){ 
         }
         console.log(test);
         var test = function(){}
         console.log(test);
     }
     test(10);
     var test = 456
     console.log(test);
 </script>

参考
https://www.cnblogs.com/xuxiaoyu/p/10133373.html

相关文章

  • JavaScript 的“预 编译”

    JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行...

  • javascript预编译机制

    预编译的两种情况全局: 1.全局 直接是script标签中的代码,不包括函数执行执行前:1.首先生成一个GO(gl...

  • 你需要知道的javascript的提升

    javascript在执行前会有一个预编译过程,预编译过程会先预声明变量再预定义函数,比如 预编译过后,类似于 运...

  • JavaScript的预解析

    在JavaScript中有一种机制就是:“预解析机制” 简单来说就是在解析过程中会先将函数声明和变量声明提前解析函...

  • javascript原生知识 之js编译机制

    js编译机制 首先,对javascript我们通常称之为“动态”或“解释执行语言”,但事实上它是一门编译语言。...

  • JS - 单线程与 setTimeout 执行原理

    Javascript 引擎单线程机制 首先明确,JavaScript引擎是单线程机制 JavaScript 是单线...

  • JS notebook goods

    JS 机制 JavaScript异步机制 Excuse me?这个前端面试在搞事! JavaScript 运行机制...

  • JVM内存模型与数据结构

    JAVA代码执行过程 JAVA源码编译由三个过程组成:源码编译机制、类加载机制、类执行机制。代码编译由JAVA源码...

  • 3、node的核心模块

    JavaScript核心模块的编译过程; 在编译所有C/C++文件之前,编译程序需要将所有的JavaScript模...

  • Java代码编译和执行的整个过程

    一、简述 Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制;②类加载机制;③类执行机制...

网友评论

      本文标题:javascript预编译机制

      本文链接:https://www.haomeiwen.com/subject/bqaxiqtx.html