关于javascript变量声明、函数声明提升的问题

今天看到了个面试题

function fn(){
    console.log(a);
    var a = 2;
    function a(){

    };
    console.log(a);
};
fn();

变量声明提升和函数声明提升,代码可以这样理解:

function fn(){
    var a;
    function a(){

    };
    console.log(a);//这里是什么?
    a = 2;
    console.log(a);//2
};
fn();

查了一下,说 函数声明的权重要比变量声明的权重大,同名情况下,变量声明会被忽略。这样的话,第一个console就是函数本身。事情这样结束就没意思了。再看一题。

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

这就不对了吧。不是说好的函数声明权重大,同名的变量声明会被忽略吗?百思不得姐(解),下班路上寒风一吹,明白了….
根据变量声明提升,和函数声明提升,上面的代码可以写成下面这样。确实是函数声明权重大于变量声明,忽略了变量的声明。但是下面还有给变量a赋值的操作。再调用a();自然就是得到2这个结果了

var a;
function a (){
    console.log(1);
}
console.log(a);//"function a (){}"
a = function(){
    console.log(2);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值