我的编程空间,编程开发者的网络收藏夹
学习永远不晚

javascript预编译的功能是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

javascript预编译的功能是什么

本篇内容主要讲解“javascript预编译的功能是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript预编译的功能是什么”吧!

javascript预编译做了:1、语法分析,就是引擎检查你的代码有没有什么低级的语法错误;2、预编译,简单理解就是在内存中开辟一些空间,存放一些变量与函数 ;3、解释执行,顾名思义便是执行代码了。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

JavaScript运行三部曲

  • 语法分析

  • 预编译

  • 解释执行

语法分析很简单,就是引擎检查你的代码有没有什么低级的语法错误; 解释执行顾名思义便是执行代码了; 预编译简单理解就是在内存中开辟一些空间,存放一些变量与函数 ;

JS预编译什么时候发生

预编译到底什么时候发生? 误以为预编译仅仅发生在script内代码块执行前 这倒并没有错 预编译确确实实在script代码内执行前发生了 但是它大部分会发生在函数执行前

实例分析

先来区分理解一下这2个概念: 变量声明 var … 函数声明 function(){}

<script>
var a = 1;
console.log(a);
function test(a) {
  console.log(a);
  var a = 123;
  console.log(a);
  function a() {}
  console.log(a);
  var b = function() {}
  console.log(b);
  function d() {}
}
var c = function (){
console.log("I at C function");
}
console.log(c);
test(2);
</script>

分析过程如下:

  • 页面产生便创建了GO全局对象(Global Object)(也就是window对象);

  • 第一个脚本文件加载;脚本加载完毕后,分析语法是否合法;

  • 开始预编译 查找变量声明,作为GO属性,值赋予undefined;

  • 查找函数声明,作为GO属性,值赋予函数体;

预编译

//抽象描述
    GO/window = {
        a: undefined,
        c: undefined,
        test: function(a) {
            console.log(a);
            var a = 123;
            console.log(a);
            function a() {}
            console.log(a);
            var b = function() {}
            console.log(b);
            function d() {}
        }
    }

解释执行代码(直到执行调用函数test(2)语句)

//抽象描述
    GO/window = {
        a: 1,
        c: function (){
            console.log("I at C function");
        }
        test: function(a) {
            console.log(a);
            var a = 123;
            console.log(a);
            function a() {}
            console.log(a);
            var b = function() {}
            console.log(b);
            function d() {}
        }
    }

执行函数test()之前,发生预编译

  • 创建AO活动对象(Active Object);

  • 查找形参和变量声明,值赋予undefined;

  • 实参值赋给形参;

  • 查找函数声明,值赋予函数体;

预编译之前面1、2两小步如下:

//抽象描述
    AO = {
        a:undefined,
        b:undefined,
    }

预编译之第3步如下:

//抽象描述
        AO = {
            a:2,
            b:undefined,
        }

预编译之第4步如下:

//抽象描述
    AO = {
        a:function a() {},
        b:undefined
        d:function d() {}
    }

执行test()函数时如下过程变化:

//抽象描述
    AO = {
        a:function a() {},
        b:undefined
        d:function d() {}
    }
    --->
    AO = {
        a:123,
        b:undefined
        d:function d() {}
    }
    --->
    AO = {
        a:123,
        b:function() {}
        d:function d() {}
    }

执行结果:

javascript预编译的功能是什么

注意:

预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译 ; 只有在解释执行阶段才会进行变量初始化 ;

预编译(函数执行前)

  • 创建AO对象(Active Object)

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

  • 实参形参相统一,实参值赋给形参

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

预编译(脚本代码块script执行前)

  • 查找全局变量声明(包括隐式全局变量声明,省略var声明),变量名作全局对象的属性,值为undefined

  • 查找函数声明,函数名作为全局对象的属性,值为函数引用

预编译小结

  • 预编译两个小规则

    • 函数声明整体提升-(具体点说,无论函数调用和声明的位置是前是后,系统总会把函数声明移到调用前面)

    • 变量 声明提升-(具体点说,无论变量调用和声明的位置是前是后,系统总会把声明移到调用前,注意仅仅只是声明,所以值是undefined)

  • 预编译前奏

    • imply global 即任何变量,如果未经声明就赋值,则此变量就位全局变量所有。(全局域就是Window)

    • 一切声明的全局变量,全是window的属性; var a = 12;等同于Window.a = 12;

  • 函数预编译发生在函数执行前一刻。

到此,相信大家对“javascript预编译的功能是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

javascript预编译的功能是什么

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

下载Word文档

猜你喜欢

JavaScript预编译什么意思

这期内容当中小编将会给大家带来有关JavaScript预编译什么意思,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JS运行三部曲js运行代码共分三步语法分析预编译解释执行JavaScript代码在运行时,
2023-06-06

vue模板预编译是什么

当vue进行打包时,会直接把组件中的模板转换为render函数,这叫做模板预编译。模板预编译的好处:运行时不再需要编译模板,提高了运行效率;且打包结果中不再需要vue的编译代码,减少了打包体积。
2023-05-14

c#编译器是用什么编写的

c# 编译器是用 c# 和 f# 编写的。它由负责解析源代码的前端(c#)、进行语义分析的中间端(c#)和将 ast 编译为 il 的后端(f#)组成。C# 编译器是用什么编写的?答案: C# 编译器是用 C# 和 F# 编写的。详细解
c#编译器是用什么编写的
2024-04-04

golang编译的原理是什么

Golang的编译原理主要涉及以下几个步骤:词法分析:将源代码分解为一个个的词法单元,比如关键字、标识符、常量、运算符等。语法分析:根据词法单元构建抽象语法树(AST),表示源代码的结构和语义。语义分析:对AST进行语义分析,检查语法错误和
2023-10-25

golang的编译过程是什么

Golang的编译过程可以分为四个主要步骤:词法分析(Lexical Analysis):将源代码分解为一个个的词法单元(token),例如标识符、关键字、运算符等。语法分析(Syntax Analysis):根据词法分析的结果,将词法单元
2023-10-22

golang的编译原理是什么

Golang(或Go)的编译原理是将Go源代码转换为机器码的过程。下面是Golang的编译过程的简要概述:词法分析(Lexical Analysis):将源代码分割为一系列的词法单元(tokens),如标识符、关键字、运算符等。语法分析(S
2023-10-22

Python编辑器的编译方法是什么

Python编辑器的编译方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从Python编辑器中也可调用编译器以及与它拥有的共用的程序,这样的话程序员就无需离开编辑器就可
2023-06-17

c编译程序指的是什么

这篇文章给大家分享的是有关c编译程序指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。c编译程序又称c语言编译器,是指用c语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。c编译程序首先会检查源
2023-06-06

ubuntu编译caffe的方法是什么

这篇文章主要介绍“ubuntu编译caffe的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ubuntu编译caffe的方法是什么”文章能帮助大家解决问题。1.打开终端输入以下更改配置文件
2023-07-04

编程热搜

目录