当函数名和变量名同名时

c(); //5
var c=3;
function c(){
console.log(5);
}
c(); //报错
为什么下面这个c要报错。

你的代码相当于下面这样

var c = function(){
    console.log(c);
};
c = 3;
c();  //将报错,此时c是一个变量了

var变量提升,此时
var c;
function c(){

c();//此时c定义为函数,随意不会报错
c=3;//此时c的类型是number
c();//此时c的类似是number,提升找不到这个function