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 () { }


 

posted @ 2018-11-01 22:25  皮卡丘wen  阅读(139)  评论(0编辑  收藏  举报