跳转到主内容
极星编程网:以代码为星,赴技术山海!

javascript中什么是预编译

在JavaScript中,预编译就是代码执行前进行的一项操作,会把变量声明提前,函数声明也提前,把这些按照一定的规则,放在创建的对象里面去的一个过程。 本教程操作环境:windows10系统、 javascript 1.8.5版、Dell G3电脑。 javascript中什么是预编译 js运行三部曲 1.语法分析 : js引擎在解析js代码之前,会先通篇扫描一下,找出低级的语法错误,比如写错大括号之类的。 2.预编译 任何的语法和语句全部会被转换成对象,GO(Global Object),AO(Active Object)把代码按照 一定的规则,放到GO和AO中 立即学习 “ Java免费学习笔记(深入) ”; 3.解释执行 编译一行执行一行,当语法分析没有问题,并且已经完成预编译阶段之后,就开始解释执行代码 什么的预编译? 预编译就是在JavaScript代码前进行的一项操作会把变量声明提前,函数声明也提前,把这些代码按照一定的规则,放在创建的对象里面去。 预编译的过程: GO window预编译 1,在执行script标签的一瞬间创建一个GO对象 2,寻找变量声明,变量名作为GO对象的属性名,值为undefined。 3,寻找函数声明,函数名作为GO对象的属性名,值为函数体,如果函数名和变量名一样,直接覆盖 AO 函数预编译 使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件 如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更 下载 1,在函数执行的一瞬间创建一个AO对象 2,寻找实参和形参,将形参作为AO对象的属性名添加到对象中,值为实参,值得注意的是,函数声明不叫变量。如果没有实参值就是undefined。 3,寻找变量声明,变量名作为AO对象的属性名,值为undefined。如果变量名和形参名一样不用管。 4 ,寻找函数声明,函数名作为AO对象的属性名,值为函数体,如果函数名和变量名一样,直接覆盖 下面我们来写一段代码来简单介绍一哈函数预编译的过程
function fun(a,b){ console.log(a); var a = 10; console.log(a); function a(){} console.log(a) a = 1; var b; console.log(b); var b = function(){} console.log(b); } fun(1,2);
1首先在执行fun之前会创建一个AO对象。
funAO{ }
2,寻找实参和形参,将形参作为AO对象的属性名添加到对象中,值为实参,值得注意的是,函数声明不叫变量。如果没有实参值就是undefined。
funAO{ a : 1, b : 2 }
3,寻找变量声明,变量名作为AO对象的属性名,值为undefined。如果变量名和形参名一样不用管
funAO{ a : 1, b : 2 }
4 ,寻找函数声明,函数名作为AO对象的属性名,值为函数体,如果函数名和变量名一样,直接覆盖
funAO{ a : function a(){}, b : 2 }
解释执行
function fun(a,b){ console.log(a); //往上面的AO对象里面寻找,a的值是function a(){}。 这里就输出function a(){} var a = 10; console.log(a);//上面一行代码把a赋值10 ,所以这里输出10 function a(){} console.log(a)//这里也是10,因为上面函数已经提前了 a = 1; var b; console.log(b);//往上面的AO对象里面寻找,b的值是2。 这里就输出2 var b = function(){}//这里的函数为啥不能提前,因为这里的是一个函数表达式,这个函数没有函数名所以不能提前。 console.log(b);//这里把b赋值function(){},所以这里输出function(){} } fun(1,2);
还有一种可能
function add(){ //这里的话碰到if判断,for....除了function作用域之外的咱们都得正常分析, //所以这里的值为undefined其实就是var a提前了赋值undefined console.log(a);//这里的输出结果为?undefined if(a){ var a = 10; } //这里是把a的值传入判断里面undefined返回的是false所以进不去,值就不会改变这里还是undefined console.log(a);//undefined } add();
这上面就是预编译的执行过程! 相关推荐: javascript学习教程

相关文章