JS中的函数与变量提升

JS中的函数与变量提升

最简单的几条话:
在预编译时,先将代码中的函数和变量声明提到最顶端
其中函数声明的优先级大于变量声明
函数表达式相当于赋值,不会提升

几个经典案例

a();
var a;
function a()
{
    alert(1);
}
a=function(){
    alert(2);
}

//结果:
//1
var a=1;
 function b(a)
 {
     alert(a);
     var a=2;
     alert(a);
     function a(){}
 }
 b(3);
 
//结果:
//function a(){}
//2
var a = 1;
function  b() {
    alert(a);
    if (!a) {
        var a =2;
    }
    alert(a);
}
b();

//最终效果:
//undefined
//2

如果把上面这个例子加上a的赋值

var a = 1;
function  b(a) {
    alert(a);
    if (!a) {
        var a =2;
    }
    alert(a);
}
b(3);

//最终效果:
//3
//3

如果在函数体内再声明函数

function b(a){
    alert(a);
    var a=2;
    alert(a);
    function a(){}
}
b(3);

//结果
//function a(){}
//2

实际的过程是
1.创建AO对象:隐式的在函数中创建了AO的对象来盛放函数中的变量,此时对象没有值
2.找形参和变量声明:将变量和形参名作为AO属性名,a值为undefined

AO:{ a:undefined;}

3.将实参值和形参统一:将实参带入函数中,由于在函数外 a(3),因此AO中a =3

AO:{ a:3;}

4.在函数体里面找函数声明,值赋予函数体:由于在函数中有 function a() {} ,这一函数因此此时AO中 a = function a() {}

AO:{ a:function a() {};}

5.执行代码,a赋值为2,所以第二次输出为2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值