`
yuyongkun4519
  • 浏览: 44579 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaScript预编译

 
阅读更多

js预编译:

如下实例:

function a(a,b,c){
  console.log(a);
  var a=123;
  function a(){}
  console.log(a);
  var b=function(){};
  console.log(b);
  function c(){}
  console.log(c);
}
a(1,2,3);

要想准确得到打印结果,必须对js预编译有深刻的理解。只有理解了预编译才能够更好的理解js函数的执行过程。

预编译发生在函数执行的前一刻,预编译有四个过程:

1,创建activation object(简写:ao)

2,寻找形参和变量声明,将形参和变量名作为ao属性名,默认值都是undefined

3,将实参值和形参统一

4,寻找函数体中函数声明,将函数体赋值给ao中对应的属性

 

按照上述规则,a函数执行前,在预编译阶段ao对象属性变化过程是:

1,创建ao对象

ao{

}

2,寻找函数体中ao属性名

ao{

a:undefined,

b:undefined,

c:undefined

}

3,实参赋值给形参

ao{

a:1,

b:2,

c:3

}

4,寻找函数体中函数声明赋,值赋予函数体

ao{

a:function a(){},

b:2,

c:function c(){}

}

预编译的结果是:

ao{

a:function a(){},

b:2,

c:function c(){}

}

然后函数开始执行,执行到第一行console.log时a值时function a(){},第二行为a赋值123,此时

ao{

a:123

b:2,

c:function c(){}

}

所以console.log(a)==>123

执行到console.log(b)时ao为:

ao{

a:123

b:function(){},

c:function c(){}

}

所以console.log(b)==>function(){}

 执行到console.log(c)时ao为:

ao{

a:123

b:function(){},

c:function c(){}

}

所以console.log(c)==>function c(){}

分享到:
评论

相关推荐

    javascript预编译思考

    JavaScript预编译是一种优化代码执行效率的技术,尤其在大型项目中尤为重要。预编译的主要目的是在实际运行前处理代码,减少解析和运行时的负担,提高应用的性能。本篇文章将深入探讨JavaScript预编译的概念、重要性...

    实例讲解JavaScript预编译流程

    大家都知道JavaScript是解释型语言,既然是解释型语言,就是编译一行,执行一行,那又何来预编译一说呢?脚本执行js引擎都做了什么呢?今天我们就来看看吧。 1-JavaScript运行三部曲 语法分析 预编译 解释执行 语法...

    JavaScript 详解预编译原理

    JavaScript 预编译原理 今天用了大量时间复习了作用域、预编译等等知识 看了很多博文,翻开了以前看过的书(好像好多书都不会讲预编译) 发现当初觉得自己学的很明白,其实还是存在一些思维误区 (很多博文具有...

    浅析JavaScript预编译和暗示全局变量

    在JavaScript编程中,理解预编译和全局变量的概念至关重要,因为它们直接影响着代码的执行和变量的作用域。本文将深入探讨这两个概念。 首先,让我们来看看什么是“暗示全局变量”。在JavaScript中,如果一个变量...

    网站的预编译

    预编译是将动态语言(如PHP、Ruby on Rails、ASP.NET等)的代码在部署之前转换为静态HTML、CSS和JavaScript文件的过程。这样做有以下几个关键的好处: 1. **性能优化**:预编译可以减少服务器的计算负担,因为...

    JavaScript作用域原理(二) 预编译[9 29]

    本文将深入探讨JavaScript的作用域机制,特别是预编译的概念。在理解这些知识点之前,建议先回顾一下JavaScript的基础语法。 首先,我们要明白什么是作用域。简单来说,作用域决定了一个变量或函数在哪里可以被访问...

    Packem是一个预编译的通用JavaScript模块捆绑器专注于性能灵活性和可扩展性

    Packem,一个预编译的通用JavaScript模块捆绑器,是为了解决现代Web开发中的性能、灵活性和可扩展性需求而设计的。在JavaScript开发领域,模块打包是必不可少的环节,它将分散的源代码文件合并成单一的可执行文件,...

    javascript编译工具

    结合CSS预处理器如Sass或Less,JavaScript编译工具还能帮助我们将预处理器的代码转换为浏览器可识别的CSS,简化样式编写,并实现模块化管理。 总之,JavaScript编译工具是提升JavaScript开发效率的关键,它们提供了...

    bootstrap-3.3.7 预编译版下载

    8. **JavaScript插件API**:预编译版中的JavaScript插件可以通过jQuery API进行交互和自定义,例如,通过调用$('#myModal').modal('show')来显示一个模态框。 9. **自定义构建**:虽然预编译版不包含在内,但...

    简单易用的前端模板预编译工具

    通过预编译,开发者可以在开发阶段就处理好模板,生成静态的JavaScript函数,从而在运行时只需传递数据即可快速生成动态页面。 二、工作原理 预编译工具通常接受一种特殊的模板语法,如Mustache、 Handlebars 或 ...

    JavaScript运行过程中的“预编译阶段”和“执行阶段”

    javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块为范围[removed][removed],即每遇到...

    gyp.rar v8库,用预编译v8

    7. 编译完成后,你可以将预编译的V8库集成到你的项目中,享受快速的JavaScript执行性能。 这个过程可能因具体项目需求而略有不同,但总体而言,gyp.rar文件提供了一个跨平台的方式来预编译V8,这对于在多个平台上...

    最新版Bootstrap的预编译文件(4.5.0)

    下载 Bootstrap v4.5.0 版本的预编译文件,以便轻松地将其加入到你的项目中,其中包括:编译并压缩(minified)之后的 CSS 文件和编译并压缩(minified)之后的 JavaScript 插件

    js笔记,预编译/原型/

    本文将深入探讨JavaScript中的两个关键概念:预编译和原型。 **预编译** 预编译是JavaScript引擎在代码执行前进行的一种优化过程,主要涉及到函数声明和变量声明的提升。在JavaScript中,函数声明和变量声明都会被...

    opencv-wasm:将OpenCV 4.3.0预编译为JavaScript和WebAssembly,以用于节点和deno。 :sauropod:

    将OpenCV预编译为针对node.js和deno环境JavaScript + WebAssembly。 :sauropod: 在此Wasm编译的OpenCV中,无需在计算机中安装OpenCV。 整个OpenCV库已经在此包中( opencv.js和opencv.wasm )。 该模块具有零依赖...

    Windows 下预编译动态链接的 google v8 lib dll 库

    总的来说,预编译的Google V8 DLL库为Windows开发者提供了一种快速便捷的方式,使他们能够在VS2013项目中集成并利用V8的强大JavaScript执行能力。正确地配置和使用这些库,可以使你的应用具备运行JavaScript脚本的...

Global site tag (gtag.js) - Google Analytics