函数提升与变量提升的优先级

我看到网上很多人说函数提升优先级高于变量提升,我以前根本就没有听说过,但是我我做题也没有错过,这就有点奇怪,后来发现只是解题思路不一样,但是结果一样!!!
总结一句话就是:
函数提升优先级高于变量提升,且不会被同名变量声明时覆盖,但是会被同名变量赋值后覆盖
大家可以看下面这段代码:

 console.log(a) // ƒ a(){}  变量a赋值前打印的都会是函数a
 var a=1;
 function a(){}
 console.log(a) // 1    变量a赋值后打印的都会是变量a的值

首先变量和函数声明都提升,但函数提升优先级高于变量,都提升后变量只是定义没有赋值,所以输出的是函数a。详细过程如下:

 function a(){}  // 函数声明提升 a-> f a (){}
 var a;        // 变量提升
 console.log(a)  // 此时变量a只是声明没有赋值所以不会覆盖函数a --> 输出函数a  f a (){}
 a=1;     //变量赋值
 console.log(a)  // 此时变量a赋值了 --> 输出变量a的值 1

总结:由于函数声明和变量都会提升,如果函数与变量同名,那么只要在变量赋值前打印的都会是函数,在变量赋值之后打印都是变量的值。

现在让我们再看一段代码:

 a();  // 2
 var a = function(){  // 看成是一个函数赋值给变量a
    console.log(1)
 }
 a(); // 1
 function a(){
    console.log(2)
 }
 a(); // 1

其实只是想告诉大家只有函数声明才会提升函数表达式不会提升,所以在函数表达式后面的代码会输出1,因为变量a赋值后把提升的函数a覆盖了。详细过程如下:

 function a(){      // 函数提升
     console.log(2)
 }
 var a;   // 变量提升
 a();    // 2  
 a = function(){    // 变量a赋值后覆盖上面的函数a
     console.log(1)
 }
 a(); // 1
 a(); // 1

再看一段代码:

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

打印的是2,道理很简单先声明的会被后声明的覆盖。

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白嫖leader

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值