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(){}
相关推荐
NULL 博文链接:https://beck5859509.iteye.com/blog/505975
大家都知道JavaScript是解释型语言,既然是解释型语言,就是编译一行,执行一行,那又何来预编译一说呢?脚本执行js引擎都做了什么呢?今天我们就来看看吧。 1-JavaScript运行三部曲 语法分析 预编译 解释执行 语法...
主要介绍了JavaScript预编译和暗示全局变量的相关资料,帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
JavaScript 预编译原理 今天用了大量时间复习了作用域、预编译等等知识 看了很多博文,翻开了以前看过的书(好像好多书都不会讲预编译) 发现当初觉得自己学的很明白,其实还是存在一些思维误区 (很多博文具有...
Packem是一个预编译的通用JavaScript模块捆绑器专注于性能灵活性和可扩展性
javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块为范围[removed][removed],即每遇到...
下载 Bootstrap v4.5.0 版本的预编译文件,以便轻松地将其加入到你的项目中,其中包括:编译并压缩(minified)之后的 CSS 文件和编译并压缩(minified)之后的 JavaScript 插件
在 http://www.cnblogs.com/strick/p/3994209.html 有介绍说明,修正于2014.9.29
将OpenCV预编译为针对node.js和deno环境JavaScript + WebAssembly。 :sauropod: 在此Wasm编译的OpenCV中,无需在计算机中安装OpenCV。 整个OpenCV库已经在此包中( opencv.js和opencv.wasm )。 该模块具有零依赖...
预编译课程笔记(晨哥哥)
js笔记,预编译/原型/
预编译: 发生在代码执行的前一刻。 解释执行: 开始执行代码,解释一行执行一行。 预编译初识: var a = 123; console.log(a); //控制台打印123; console.log(a); var a = 123; //控制台打印undefined; console...
javascript编译以及执行过程详细讲解,包括预编译和执行
一个node.js模块,用于将JavaScript模板(例如mustache或jQuery.tmpl)预编译为一个文件。 您可以预编译一些静态小胡子,hogan.js,jQuery.tmpl,underscore.js或任何其他模板,并将它们包含在生成的javascript...
用于生产环境的 Bootstrap 编译并压缩后的 CSS、JavaScript 和字体文件。不包含文档和源码文件。
是一种解释性脚本语言(代码不进行预编译)。 主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。 跨平台特性,在绝大多数...