广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript预编译过程是什么
  • 496
分享到

JavaScript预编译过程是什么

2024-04-02 19:04:59 496人浏览 薄情痞子
摘要

本篇内容介绍了“javascript预编译过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!阶段(三

本篇内容介绍了“javascript预编译过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

JavaScript预编译过程是什么

阶段(三个)

  1. 词法语法分析:词法语法分析就是检查JavaScript代码是否有一些低级的语法错误

  2. 预编译:本文主讲

  3. 执行代码:执行代码就是js引擎解析代码,解析一行执行一行

这章主要讲预编译过程

预编译过程

预编译也分为2个时间点:

  1. 第一个是在JavaScript代码执行之前

  2. 第二个是在函数执行之前。

但是JavaScript代码之前,之前的预编译只发生一次,函数执行之前的预编译是多次的。

1. JavaScript代码执行之前的预编译

  1. JavaScript代码执行之前,首先会创建一个全局对象,可以理解为window对象,也可以理解为GOGlobal Object)对象,我们是看不到的(无法打印)

  2. 然后将所有声明的全局变量未使用varlet声明的变量放到Go对象中,并且赋值为undefined(联想到“变量提升”)

  3. 分析**函数声明:**然后再将所有的函数声明也放到GO对象中,并且赋值为函数自身的函数体(函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖)

案例说明

<script>
    var a = 1;
    console.log(a);
    console.log(b);
    var b = 10;
    function fun (a) {
        console.log(b);
        var a = b = 2;
        var c = 123;
        console.log(a);
        console.log(b);
    }
    var a2 = 20
    fun(1);
 
</script>

结合上面说的步骤:

  1. 首先,<script></script>中的代码执行之前会创建一个GO对象(window对象)

    GO = {
    	//自带的属性都不写
    }
  2. 将所有声明的全局变量、未使用varlet声明的变量放到GO对象中,并且赋值为undefined

    GO = {
    	a : undefined,
    	b : undefined,
    	a2 : undefined
    }
  3. 分析函数声明,函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖

    GO = {
    	a : undefined,
    	b : undefined,
    	a2 : undefined,
    	function fun (a) {
        var a = b = 2;
        var c = 123;
      }
    }
  4. 此时完成了js代码执行之前的预编译过程,开始执行js代码,首先是给a进行赋值为1,在GO对象里边也会进行对应的改变:

    GO = {
    	a : 1,
    	b : undefined,
    	a2 : undefined,
    	function fun (a) {
        var a = b = 2;
        var c = 123;
      }
    }
  5. 然后打印a,此时会在GO对象上去找变量a,然后此时的a的值为1,所以console.log(a) 是等于1的。接着打印b,也会去GO对象上找,找到了b的值为undefined,所以console.log(b)是等于undefined

  6. 接着执行到赋值语句:b = 10; 此时GO对象里b的值变成了10

    GO = {
    	a : 1,
    	b : 10,
    	a2 : undefined,
    	function fun (a) {
    		var a = b = 2;
    		var c = 123;
    	}
    }
  7. 接着下一行代码是一个**fun函数,此时不会去执行该函数**,因为在前面的预编译过程中实际上是被放到了代码的最前端,就是传说中的声明提前,所以忽略掉了。接着给a2进行赋值操作a2 = 20,GO对象也发生变化:

    GO = {
    	a : 1,
    	b : 10,
    	a2 : 20,
    	function fun (a) {
    		var a = b = 2;
    		var c = 123;
    	}
    }
  8. 接着是执行fun函数,如上面说到的另外一个时间点发生的预编译,就是执行函数之前,现在就来说一下函数执行前的预编译是怎么样的。

2. 函数执行前的预编译

  1. 函数调用,也是会生成自己的作用域(**AO:**Activetion Object,执行期上下文)AO活动对象。函数调用时候,执行前的一瞬间产生的,如果有多个函数的调用,会产生多个AO

    如果遇到AO对象上属性同名,则无情覆盖

    1. 生成AO对象:函数执行前的一瞬间,生成AO活动对象

    2. 分析生成AO属性:查找形参变量声明放到AO对象,赋值为undefined

    3. 分析函数声明:查找函数声明放到AO对象并赋值为函数体。函数名为属性名,值为函数体;

  2. 逐行执行。

案例说明

拿的是上文中的代码示例。

  1. 第一步创建AO对象

    AO{
    
    }
  2. 查找形参变量声明放到AO对象并赋值为undefined

    注意:fun函数里边的b是未经var声明的,所以是全局变量,不会被放在fun的AO上。

    AO{
    	a: undefined,//形参a与局部变量a同名
    	c: undefined
    }
  3. 实参赋值到形参

    AO{
    	a: 1,
    	c: undefined,
    }
  4. 查找函数声明放到AO对象并赋值为函数体,fun函数没有函数声明,所以忽略这一步。

  5. 函数执行之前的预编译完成,开始执行语句

  6. 执行代码

    1. 首先执行打印变量b,而此时fun的AO里边并没有变量b,所以会去GO对象里边找,此时的GO对象b的值为10,所以第一行代码打印出10;

    2. 第二行代码首先要看的是b = 2,然后GO对象里边b的值就被改为2了。

      GO = {
      	a : 1,
      	b : 10,
      	a2 : 20,
      	function fun (a) {
      		var a = b = 2;
      		var c = 123;
      	}
      }
    3. 然后b再赋值给a,变量a是属于局部变量a,所以fun的AO对象里边a的值被改为2。

      AO{
      	a: 2,
      	c: undefined,
      }
    4. 接着下一个赋值语句是c = 123,所以AO对象中c的值被改为了123

      AO{
      	a: 2,
      	c: 123,
      }
    5. 此时再执行console.log(a)的值就是AO对象里边a的值 2;执行console.log(b)的值就是GO对象b的值 2,至此函数fun执行完毕,紧跟着fun的AO也会被销毁

  7. 综上所述,依次打印出来的值为:1,undefined,10,2,2

JavaScript预编译过程是什么

“JavaScript预编译过程是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: JavaScript预编译过程是什么

本文链接: https://www.lsjlt.com/news/88842.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript预编译过程是什么
    本篇内容介绍了“JavaScript预编译过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!阶段(三...
    99+
    2022-10-19
  • javascript预编译的功能是什么
    本篇内容主要讲解“javascript预编译的功能是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript预编译的功能是什么”吧! ...
    99+
    2022-10-19
  • JavaScript预编译和执行过程详解
    javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段&rdquo...
    99+
    2022-11-13
  • JavaScript预编译什么意思
    这期内容当中小编将会给大家带来有关JavaScript预编译什么意思,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JS运行三部曲js运行代码共分三步语法分析预编译解释执行JavaScript代码在运行时,...
    99+
    2023-06-06
  • javascript中预编译指的是什么意思
    这篇文章将为大家详细讲解有关javascript中预编译指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在JavaScript中...
    99+
    2022-10-19
  • JavaScript预编译和执行过程实例分析
    本篇内容介绍了“JavaScript预编译和执行过程实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javascript相对于其它语言...
    99+
    2023-07-02
  • golang的编译过程是什么
    Golang的编译过程可以分为四个主要步骤: 词法分析(Lexical Analysis):将源代码分解为一个个的词法单元(to...
    99+
    2023-10-22
    golang
  • vue模板预编译是什么
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。模板预编译当使用 DOM 内模板或 JavaScript 内的字符串模板时,模板会在运行时被编译为渲染函数。通常情况下这个过程已经足够快了,但对性能敏感的应用还是最好避免...
    99+
    2023-05-14
    Vue
  • java程序的编译过程是什么
    Java程序的编译过程分为以下几个步骤:1. 编写源代码:首先需要编写Java程序的源代码,源代码是以.java文件的形式存在,可以...
    99+
    2023-09-28
    java
  • linux编译安装的过程是什么
    这篇文章主要介绍“linux编译安装的过程是什么”,在日常操作中,相信很多人在linux编译安装的过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux编译安装的...
    99+
    2023-02-15
    linux
  • android源代码的编译过程是什么
    Android源代码的编译过程主要包括以下几个步骤:1. 下载源代码:从Android官方网站下载源代码,并解压到本地目录。2. 配...
    99+
    2023-09-21
    android
  • notepad插件cmake的编译过程是什么
    这篇文章主要讲解了“notepad插件cmake的编译过程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“notepad插件cmake的编译过程是什么”吧!Notepad++ 是一个文本...
    99+
    2023-07-05
  • JavaScript编译原理是什么
    本篇内容介绍了“JavaScript编译原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.分词/...
    99+
    2022-10-19
  • 一文说透什么是MySQL的预编译
    目录一、什么是mysql的预编译?二、 如何使用预编译?2.1 MySQL预编译的语法三、使用PreparedStatement进行预编译3.1 开启查询日志3.2 开启预编译功能3.3 cachePrepStmts参数...
    99+
    2022-11-15
  • javascript预编译检查错误怎么办
    JavaScript作为一门常见的编程语言,在Web开发中得到了广泛应用。在编写JavaScript代码时,由于语言特性的复杂性和灵活性,很容易犯一些错误,这些错误可能会导致程序运行时的崩溃或者产生不可预料的结果。要避免这种情况的发生,我们...
    99+
    2023-05-14
  • Mybatis为什么需要预编译
    小编给大家分享一下Mybatis为什么需要预编译,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么需要预编译定义:SQL 预编...
    99+
    2022-10-19
  • C语言编程之预处理过程与define及条件编译
    目录名示常量#define重定义常量在#define中使用参数预处理器粘合剂:##运算符变参宏:… 和_ _ VAG_ARGS_ _宏与函数预处理指令#undef指令从C预处理器的角...
    99+
    2022-11-12
  • C语言从编译到运行的过程是什么
    C语言从编译到运行的过程可以简单描述为以下几个步骤:1. 编写源代码:首先,程序员使用文本编辑器编写C语言源代码,包括各种语句和函数...
    99+
    2023-08-14
    C语言
  • vue模板预编译有什么作用
    今天小编给大家分享一下vue模板预编译有什么作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。当vue进行打包时,会直接把组...
    99+
    2023-07-04
  • Oracle中重新编译无效的存储过程是什么
    本篇内容主要讲解“Oracle中重新编译无效的存储过程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle中重新编译无效的存储过程是什么”吧!Ora...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作