问题:
以下代码会输出什么:
function fn(a){
console.log(a);
var a = 2;
function a(){}
console.log(a);
}
fn(1);
答案:f a() { } 2
解析:我们知道预解析阶段,变量声明和函数声明会提前,且变量名和函数名同名时,函数优先级高于变量,会覆盖变量,因此第一个输出的是f a(){ },继续执行,会执行a=2,再输出的时候就会输出2,不理解的同学百度一下变量提升和函数提升