JavaScript预编译

Posted 哈娄

tags:

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

预编译分为两种:

  • 函数预编译 (函数执行的前一刻执行)
  • 全局预编译 (页面加载完成时执行)

函数执行编译步骤:

  1. 创建Activation Object
  2. 找形参和变量声明, 将变量声明和形参作为AO的属性名, 值为undefined
  3. 将实参和形参值统一
  4. 在函数体内找函数声明,将函数名作为AO对象的属性名,值赋予函数体

代码Demo:

function fn(a) {
    var a = 123
    function a() {}
    var b = function () {}
    function d() {}
}

代码编译解释:

1.创建AO对象

AO: {}

2.找形参和变量声明,作为AO的属性名,值为undefined

AO{
    a: undefined,
    b: undefined
}

3.将实参和形参值统一

AO:{
    a: 1,
    b:undefined
}

4.在函数体内找函数声明,将函数名作为AO的属性值,值赋予函数体

AO:{
    a: function() {},
    b:undefined,
    d: function() {}
}

完成过程 

AO:{
    a:underfined -> 1 -> function a(){}
    b:underfined
    d:function d(){}
}

全局预编译三部曲

  1. 创建Global object
  2. 找形参和变量声明, 将变量声明和形参作为GO对象的属性名,值为undefined
  3. 在全局里找函数声明,讲函数名为GO对象属性名,值赋予函数体

 

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

JavaScript预编译

JavaScript的预编译和执行

JavaScript之预编译

浅谈JavaScript预编译原理

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

JavaScript预编译学习