我的理解是: 变量提升>函数提升

代码片段1:

        console.log(c)

        var c = 3;
        function c(){}

结果输出:Function : c

变量先提升,函数后提升,在变量未赋值操作前,自然显示的是后提升的同名函数了

代码片段2:

        var c = 3;
        function c(){}

        console.log(c)

结果输出: 3

赋值后,可以理解为:变量提升->函数提升->变量赋值,所以自然显示的是变量了

代码片段3:

        var c ;
        function c(){};

        console.log(typeof c)

结果输出:function
        

这里和代码片段1的原理是一样的,变量先提升,函数后提升,由于并没有变量赋值,所以自然显示的是后提升的同名函数

结论:变量提升>函数提升,同名变量和同名函数同时存在,且变量有赋值,那么在赋值之后的输出如果变量没有消失,那么永远都会是变量,函数没有出头之日