千家信息网

javascript中预编译指的是什么意思

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章将为大家详细讲解有关javascript中预编译指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在JavaScript中,预编译就是代码执行前进
千家信息网最后更新 2024年11月20日javascript中预编译指的是什么意思

这篇文章将为大家详细讲解有关javascript中预编译指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在JavaScript中,预编译就是代码执行前进行的一项操作,会把变量声明提前,函数声明也提前,把这些按照一定的规则,放在创建的对象里面去的一个过程。

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

javascript中什么是预编译

js运行三部曲

1.语法分析 : js引擎在解析js代码之前,会先通篇扫描一下,找出低级的语法错误,比如写错大括号之类的。

2.预编译 任何的语法和语句全部会被转换成对象,GO(Global Object),AO(Active Object)把代码按照 一定的规则,放到GO和AO中

3.解释执行 编译一行执行一行,当语法分析没有问题,并且已经完成预编译阶段之后,就开始解释执行代码

什么的预编译?

预编译就是在JavaScript代码前进行的一项操作会把变量声明提前,函数声明也提前,把这些代码按照一定的规则,放在创建的对象里面去。

预编译的过程:

GO window预编译

1,在执行script标签的一瞬间创建一个GO对象

2,寻找变量声明,变量名作为GO对象的属性名,值为undefined。

3,寻找函数声明,函数名作为GO对象的属性名,值为函数体,如果函数名和变量名一样,直接覆盖

AO 函数预编译

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中预编译指的是什么意思"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0