iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript预编译和执行过程详解
  • 290
分享到

JavaScript预编译和执行过程详解

2024-04-02 19:04:59 290人浏览 安东尼
摘要

javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段&rdquo

javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块为范围<script></script>,即每遇到一个代码块都会进行预编译>执行),了解javascript引擎的执行机理,将有助于在写js代码过程中的思路总结

首先javascript是解释型语言,自然就是编译一行,执行一行。

js运行过程分为三步:
1、语法分析 
2、预编译  
3、解释执行

语法分析就是指js引擎去判断检查你的代码是否存在语法错误,解释执行更不用多说,自然就是执行你的代码,然而重中之重的是预编译,预编译简单理解就是在内存中开辟一些空间,存放一些变量与函数 。

理解预编译首先要明白函数声明和变量赋值:

javascript中的两种声明方式,var和function,前者声明的是变量,后者声明的是方法。

在预编译中,javascript对这两种声明做出了两种处理方案:

<script>
   var a = "1";    //声明变量a
   function b() {    //声明方法b
     alert();
   }
   var c = function () { //声明变量c
     alert();
   }
 </script>

以上代码块中,a、c为变量赋值,b为函数声明,当执行以上的代码时,首先会进入预编译阶段,对与变量赋值a、c会在内存中开辟一块内存空间并指向变量名,且赋值为undefined

预编译(函数执行前)

1. 创建AO对象(Active Object)
2. 查找函数形参及函数内变量声明,形参名及变量名作为AO对象的属性,值为undefined
3. 实参形参相统一,实参值赋给形参
4. 查找函数声明,函数名作为AO对象的属性,值为函数引用

题目1:

<script>
  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() {
    }
 
    console.log(d)
  }
  fn(1)
</script>

分析:

1)、创建AO对象

AO{
 
}

2)、查找函数形参及函数内变量声明,形参名及变量名作为AO对象的属性,值为undefined

AO{
      a:undefined,
      b:undefined,
    }

3)、实参形参相统一,实参值赋给形参

AO{
     a:1,
     b:undefined,
   }

4)、查找函数声明,函数名作为AO对象的属性,值为函数引用

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

变量、函数声明后代码顺序

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

解释执行

当执行到a=123之前时: 此时 console.log(a)打印的值为: function a() {}

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

当执行到a=123时: 此时 console.log(a)打印的值为: 123 123

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

当执行到b = function () {}时:

此时 console.log(b)打印的值为:function () {}

console.log(d)打印的值为:function d() {}

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

浏览器执行结果:

题目2:

<script>
    function test(a, b) {
      console.log(a);
      c = 0;
      var c;
      a = 3;
      b = 2;
      console.log(b);
      function b() {
      }
 
      function d() {
      }
 
      console.log(b)
    }
    test(1)
  </script>

分析:

1)、创建AO对象

AO{
  
}

2)、查找函数形参及函数内变量声明,形参名及变量名作为AO对象的属性,值为undefined

AO{
      a:undefined,
      b:undefined,
      c:undefined
    }

3)、实参形参相统一,实参值赋给形参 

AO{
      a:1,
      b:undefined,
      c:undefined
    }

4)、查找函数声明,函数名作为AO对象的属性,值为函数引用 

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

变量、函数声明后代码顺序

function test(a, b) {
  var a
  var b
  var c
 
  function b() {
  }
 
  function d() {
  }
 
  console.log(a);
  c = 0;
  a = 3;
  b = 2;
  console.log(b);
  console.log(b)
}

解释执行

当执行到function d() {}之前时: 此时 console.log(a)打印的值为: 1

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

当执行到b=2之前时: 此时 console.log(b)打印的值为: 2 2

AO{
      a:1,
      b:2,
      c:0,
      d:function d() {
      }
}

浏览器执行结果:

题目3:

<script>
    function test(a, b) {
      console.log(a);
      console.log(b);
      var b = 234;
      console.log(b);
      a = 123;
      console.log(a);
      function a() {
      }
 
      var a;
      b = 456;
      var b = function () {
      }
      console.log(a);
      console.log(b);
    }
    test(1)
  </script>

分析:

1)、创建AO对象

AO{
   
}

2)、查找函数形参及函数内变量声明,形参名及变量名作为AO对象的属性,值为undefined 

AO{
    a:undefined,
    b:undefined
  }

3)、实参形参相统一,实参值赋给形参 

AO{
     a:1,
     b:undefined
   }

4)、查找函数声明,函数名作为AO对象的属性,值为函数引用

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

变量、函数声明后代码顺序

function test(a, b) {
   var a;
   var b;
 
   function a() {
   }
 
   console.log(a);
   console.log(b);
   b = 234;
   console.log(b);
   a = 123;
   console.log(a);
   b = 456;
   b = function () {
   }
   console.log(a);
   console.log(b);
 }

解释执行

当执行到function a() {}时:
此时 console.log(a)打印的值为: function a() {}

console.log(b)打印的值为: undefined

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

当执行到 b=234时: 此时 console.log(b)打印的值为: 234

AO{
      a:function a() {
      },
      b:234
    }

当执行到 a=123时: 此时 console.log(a)打印的值为: 123

AO{
     a:123,
     b:234
   }

当执行到 b=456 时

AO{
     a:123,
     b:456
   }

当执行到 b = function () {}时:
此时 console.log(a)打印的值为: 123

console.log(b)打印的值为: function () {}

AO{
     a:123,
     b:function () {
     }
   }

浏览器执行结果:

到此这篇关于JavaScript预编译和执行过程的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: JavaScript预编译和执行过程详解

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

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

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

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

下载Word文档
猜你喜欢
  • JavaScript预编译和执行过程详解
    javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段&rdquo...
    99+
    2022-11-13
  • JavaScript预编译和执行过程实例分析
    本篇内容介绍了“JavaScript预编译和执行过程实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javascript相对于其它语言...
    99+
    2023-07-02
  • JavaScript预编译过程是什么
    本篇内容介绍了“JavaScript预编译过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!阶段(三...
    99+
    2022-10-19
  • 详解Java的编译执行与解释执行
    目录一、前言二、理解Java的几个编译器三、Java采用的是解释和编译混合的模式JIT将字节码转换成最终的机器码四、编译与解释比较单独使用解释器的缺点单独使用JIT编译器的缺点一、前...
    99+
    2022-11-12
  • SpringBoot详解执行过程
    目录1.SpringApplication实例的初始化创建2.项目的初始化启动每个Spring Boot项目都有一个主程序启动类,在主程序启动类中有一个启动项目的main()方法,在...
    99+
    2022-11-13
  • 简单实例带你了解Python的编译和执行全过程
    目录基本说明DEMO演示讲解其他说明基本说明 python 是一种解释型的编程语言,所以不像编译型语言那样需要显式的编译过程。然而,在 Python 代码执行之前,它需要被解释器转换...
    99+
    2023-05-17
    Python 编译 Python执行过程
  • C语言从编译到运行过程详解
    目录C语言从编译到运行一、前言二、C程序编译过程三、阶段过程1、预处理阶段2、编译阶段3、汇编阶段4、链接阶段C语言从编译到运行 一、前言 最近在看CSAPP(深入理解计算机系统)然...
    99+
    2022-11-12
  • 深入解析golang编译器的编译过程:从源码到可执行文件
    从源码到可执行文件:解析golang编译器的编译过程概述:Golang是一种快速、简单和可靠的编程语言,而其编译器是将Golang代码转换为可执行文件的关键工具。在这篇文章中,我们将深入探究Golang编译器的编译过程,从源码到最终生成的可...
    99+
    2023-12-29
    编译器 (Compiler) 源码 (source code) 可执行文件 (executable file)
  • JVM教程之Java代码编译和执行的整个过程(二)
    Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机...
    99+
    2023-05-31
    java 编译 执行
  • SpringMVC执行过程详细讲解
    目录SpringMVC常用组件DispatcherServlet初始化过程SpringMVC的执行流程SpringMVC常用组件 DispatcherServlet:前端控制器,不需...
    99+
    2022-11-13
  • Win10环境下 编译 和 运行 x264的详细过程
    目录1. MSYS2 的下载和安装1.1 下载1.2 安装1.3 安装 mingw-641.4 安装 make1.5 安装 mingw-w64-x86_64-toolchain1.6...
    99+
    2022-11-13
    Win10编译 x264 Win10环境下 运行 x264
  • pytest用例执行顺序和跳过执行详解
    目录1.py文件的执行顺序2. 改变用例的执行顺序 -装饰器@pytest.mark.run(order=x)3. 分组执行用例1)在pytest.ini中配置分组2)测试用例加入标...
    99+
    2023-02-07
    pytest用例执行顺序 pytest 跳过执行
  • C语言程序的编译与预处理详解
    目录一、程序的编译1、 编译阶段2、链接二、预处理详解1、预定义符号2、#define定义的标识符3、#define定义的宏4、#unef总结一、程序的编译 我们写的源文件(*.c)...
    99+
    2022-11-12
  • 【转】 一条 SQL 的执行过程详解
    MySQL 体系架构 - 连接池组件 负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。 验证用户名和密码是否正确(数据库 MySQL 的 user 表中进行验证...
    99+
    2015-03-17
    【转】 一条 SQL 的执行过程详解
  • 详解JavaScript引擎V8执行流程
    目录一、V8来源二、V8的服务对象三、V8的早期架构四、V8早期架构的缺陷五、V8的现有架构六、V8的词法分析和语法分析七、V8 AST抽象语法树八、字节码九、Turbofan一、V...
    99+
    2022-11-12
  • Python字节码与程序执行过程详解
    目录问题:1. 执行过程2. 字节码3. 源码编译4. PyCodeObject5. 反编译6. pyc问题: 我们每天都要编写一些Python程序,或者用来处理一些文本,或者是做一...
    99+
    2022-11-11
  • C语言图文并茂详解程序编译过程
    目录一、初识编译器二、程序被编译的过程三、小结一、初识编译器 编译器是一个广义的概念,真正的编译器由下面几个模块组成,真正的编译器是进行语法分析和语义分析的。 二、程序被编译的过程...
    99+
    2022-11-13
  • 详解MySQL 查询语句的执行过程
    首先先简单的将一个查询语句背后MySQL做了什么捋一捋: 客户端发送一条查询给服务器。 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一个阶段。 服务器端进行SQL解析,...
    99+
    2022-05-19
    MySQL 查询语句 MySQL 查询语句执行过程
  • android studio2.3如何编译动态库的过程详解
    前言最近在工作中需要编译android下的动态库,本以为是一件简单的事,没想到因为工具,以及google本身被墙的原因,折腾了好久。在windows外的平台搞事情,寿命都得缩短。过程如下一种方案是用eclipse+ndk+adt插件,总之是...
    99+
    2023-05-30
    android studio 编译
  • android的编译和运行过程深入分析
    首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,示意图如下,其中包含编译、链接和签名等: (1)使用aapt工具生成R.java文件 可以先...
    99+
    2022-06-06
    运行 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作