码迷,mamicode.com
首页 > 编程语言 > 详细

javaScript预编译

时间:2018-11-02 00:29:13      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:find   span   bsp   test   开始   class   cti   code   函数   

随笔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预编译

标签:find   span   bsp   test   开始   class   cti   code   函数   

原文地址:https://www.cnblogs.com/Sharon2017/p/9893026.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!