因为函数声明优于变量声明。我们知道在代码逐行执行前,函数声明和变量声明会提前进行,而函数声明又会优于变量声明,这里的优于可以理解为晚于变量声明后,如果函数名和变量名相同,函数声明就能覆盖变量声明。
console.log(typeof fn); // function
function fn() {};
var fn;
所以以上代码将函数声明和变量声明调换顺序还是一样结果。
alert(a);
a();
var a = 3;
function a (){ alert(10) }
alert(a);
a = 6;
a()
可以得到如下形式的代码(注释为输出)
function a(){alert(10)};
alert(a); //结果是function a(){alert(10)}
a(); //弹框弹出10
var a = 3;
alert(a); //弹出框输出3
a = 6;
a(); //a此时是变量,不是函数,输出是Uncaught TypeError: a is not a function