预编译

1.js运行三部曲

  1. 语法分析
  2. 预编译(发生在函数执行的前一刻)
  3. 解释执行

预编译前奏
//函数声明整体提升
//变量    声明提升
1.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有

eg: a = 123;
eg: var a = b = 123;

2.一切声明的全局变量,全是window的属性

eg: var a = 123; ==> window.a = 123;

预编译四部曲:
1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体

function fn(a){
    console.log(a);//function a(){}

    var a = 123;

    console.log(a);//123

    function a(){}

    console.log(a);//123

    var b = function(){}

    console.log(b);//function(){}
    function d(){}
}
fn(1);
1.创建AO Activation Object(执行期上下文)
AO{
    a:123,
    b:function(){},
    d:function d(){}
}

全局生成了一个GO对象Global Object

var a = 123;
function a(){}
console.log(a);//123

GO ===window{
    a:123
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值