javaScript预编译

Posted sharon2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript预编译相关的知识,希望对你有一定的参考价值。

随笔1.未声明的变量就直接赋值,那么该变量则归全局变量所有,全局对象是什么,全局对象就是window    exp:

function test(){
         a=7;
}
test();
console.log(
window.a);//7

js三部曲:

1,:语法分析

2:预编译

3:解释执行

预编译四部曲:

1.创建AO(Activation Object)对象

2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined

3.将实参值和形象统一

4.在函数体里面找函数声明,值赋予函数体

exp:

function fn(a) {
    console.log(a);
    var a = 123;
    console.log(a);
    function a() { };
    console.log(a);
    var b = function () { };
    console.log(b);
    function d() { };
}
fn(1);   

那么预编译过程,创建AO对象里的值变化过程如下

根据四部曲的1和2步骤,得:

AO{

a:undefind

b:undefind
}

 

根据3步骤,得:

AO{

a:1

b:undefind
}

根据4步骤,得:

AO{
a:function a() { }
}
b:undefind
d:function d() { }
}

所以,到这里预编译已经完成,开始执行代码,即第一个log

 console.log(a);//function a(){}
第二个log
 console.log(a);//123
第三个log
 console.log(a);//123
第四个log
console.log(b);//function () { }


 









以上是关于javaScript预编译的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript预编译

JavaScript的预编译和执行

JavaScript之预编译

浅谈JavaScript预编译原理

JavaScript之预编译学习(内含多个面试题) #yyds干货盘点#

JavaScript预编译学习