变量提升和函数提升哪个优先

问题

首先:普遍认为函数声明提升优于变量提升
但为什么下面的结果是这样的呢(第一个输出我们好理解,因为是先编译后赋值,编译的时候先声明了var 和 function,之后再进行赋值)预编译看这篇

它们都会进行预解析,函数声明提前于变量声明,但是最终会被变量覆盖!

console.log(typeof a); // function

var a = 1;

function a(){}

console.log(typeof a); // number

解释:肯定是函数声明优先,但最后的结果要看谁最后赋值

函数声明先赋值,变量声明执行到赋值语句才赋值

因为两种声明方式共同操作一块栈空间,所以,主要看是谁最后赋值的,我们再看一个例子:

console.log(typeof a); // function

var a = 1;

function a(){}

console.log(typeof a); // number

这就看的出来了,通过上边的这个demo, 明显可以看出来,应该 函数声明先赋值的,它是在执行上下文的执行阶段一开始的时候就已经进行了赋值操作,所以 最开始 typeof a 可以得到 function;而,变量声明 是要执行到赋值语句的时候才进行的赋值,所以 最后 typeof a 得到是 number;

参考文章:函数声明 和 var声明的优先级

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值