我的理解是: 变量提升>函数提升
代码片段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的原理是一样的,变量先提升,函数后提升,由于并没有变量赋值,所以自然显示的是后提升的同名函数
结论:变量提升>函数提升,同名变量和同名函数同时存在,且变量有赋值,那么在赋值之后的输出如果变量没有消失,那么永远都会是变量,函数没有出头之日