2019-04-13 你不知道的javascript之预编译上

老样子,先看下面的函数

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)


打印结果 function(){}  123  123  function(){}

=====华丽的分隔符-----------------------------------------


js 特点: 单线程 解释性语言


js 执行 第一步

预编译:预编译发生再函数执行的前一刻

预编译四部曲:{

    1.创建ao对象

    2.找形参和变量申明,将形参和变量的名作为ao的属性名,初始值为undefined

    3。 将实参和形参统一  1 =》a f(1)

    4. 在函数体{}中找函数声明,值赋予函数体

}

1.创建AO对象(Activation Object)(执行期上下文)

先定义后执行  fn 声明 优先于 变量申明  

下面是AO 对象的变化过程

AO{

    a:undefined; 

    b:undefined,

    d: function d(){}

}


AO{

a:1;

b:function(){},

}

AO{

a:function(){};

b:function(){},

d: function d(){}

}

AO{

a:3;

b:function(){},

d: function d(){}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容