函数声明和变量声明的优先级

上几张图:

第一个:

声明了变量a,当预解析时,它的值为undefined,再声明了函数a,然后输出一下,发现a  输出为整个函数,

所以暂且认为函数声明会高级一点,

声明了a变量和a函数,弹出a的值为4,但是,调用时却为not a function,当你输出a的时候,他才赋值为4,覆盖了函数a,是声明顺序不同吗?变量声明优先级高于函数声明?


再看这个,换了个顺序,还是一样的,说明如果a变量赋值了话就会覆盖函数声明。



看看看,你不赋值他就很正常,所以就是因为赋值了,所以覆盖了函数a,


看看,一赋值就有问题,在此证明,赋的值会覆盖a函数



把输出放前面。预解析时,a是undefined,函数a为也保存了整个函数,那么为啥在前面输出为function,后面输出的a=7;


这个其实和前面的某一个一样,没什么问题


看了这些,我们应该分析一下了,js解释器进行解释的时候,会先预解析,分析一下最后一个,

预解析:

a:undefined

不执行

不执行

a:function(){   return 9}


当代码开始执行的时候:

a未赋值,还是undefined,

alert(a)  函数声明优先级高于变量声明的优先级。

alert(a());调用a函数,

可是为什么赋值了的变量却会覆盖函数呢?

有个博主说:同一个标识符的情况下,变量声明与函数声明都会提升;函数声明会覆盖变量声明,但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值那么变量优先级高于函数。


这句话解决了所有问题。


本文为转载文章,遵循 CC 4.0 BY-SA 版权协议
原文链接: https://blog.csdn.net/weixin_40197429/article/details/79557101
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值