美文网首页
JavaScript预编译

JavaScript预编译

作者: AShuiCoder | 来源:发表于2021-06-09 10:44 被阅读0次

JavaScript预编译四部曲:

  1. 创建AO(Activation Object)对象;
  2. 找形参和变量申明,将变量和形参名作为AO对象的属性名,值为undefined
  3. 将实参值和形参值相统一;
  4. 在函数体里面找函数申明,值赋予函数体。

这样说比较难理解,我们来看个例子:

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

    fn(1)

第一步,创建AO对象:

AO:  {}

第二步,找形参和变量申明,将变量和形参名作为AO对象的属性名,值为undefined:

image.png
根据上图可得AO对象为:
AO: {
  a: undefined,
  b: undefined
}

第三部,将实参值和形参值相统一
例子中函数只有a一个形参,AO对象为

AO: {
  a: 1,
  b: undefined
}

第四部,在函数体里面找函数申明,值赋予函数体。
例子中函数申明如下图:

image.png
如果函数申明的函数名和AO对象的属性名相同,那么会覆盖掉的AO原来的属性值
AO对象的a属性重复了,从而被覆盖。故生成的AO对象为:
AO: {
 a: function a () {}, //这里a被覆盖了
 b: undefined,
 d: function d () {}
}

最后来看运行结果:

    function fn (a) {
      // AO: { a: function a () {} }
      console.log(a) // function a () {}
      var a = 123  // 这里将AO的值改变成123 AO: {a: 123} 
      console.log(a) // 123
      function a () {}
      console.log(a) // 123
      var b = function () {} 
      console.log(b) // function () {}
      function d () {}
    }

    fn(1)

相关文章

  • JavaScript 的“预 编译”

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

  • 你需要知道的javascript的提升

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

  • 3、node的核心模块

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

  • JavaScript 编译原理、编译器、引擎及作用域

    首先,JavaScript确实是一门编译型语言,与C等典型编译型语言相比,区别在于JavaScript的编译过程(...

  • JavaScript预解析

    对一段js代码,js引擎并不是读一句执行一句,而是读取一段、解释执行一段。而一段一段执行,js会对读取的这段js代...

  • javaScript预解析

    js是运行在浏览器端的,浏览器内部众多功能中有一个小功能叫做js解析器。js在解析器在运行js代码时分为下面两步:...

  • JavaScript 预解析

    概念:函数或者变量都会有一个提前解析的过程,js会把函数或者变量提前解析一下、解析到它们对应的作用域最开始的位置 ...

  • JavaScript预解析

    简介js作为一门解释型脚本语言,特点是边解析边执行。而预解析则是,提前解析的意思,也就是所说的变量提升。在ES6之...

  • ts篇-vue-cli3 + ts + Decorator +

    TypeScript 是 JavaScript 的类型的超集,它可以编译成纯 JavaScript。编译出来的 J...

  • TypeScript学习总结(一)

    前言 TypeScript 是 JavaScript 的一个超集,它可以编译成纯 JavaScript(编译出来的...

网友评论

      本文标题:JavaScript预编译

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