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

}

你可能感兴趣的:(2019-04-13 你不知道的javascript之预编译上)