今天看到了个面试题
function fn(){
console.log(a);
var a = 2;
function a(){
};
console.log(a);
};
fn();
变量声明提升和函数声明提升,代码可以这样理解:
function fn(){
var a;
function a(){
};
console.log(a);//这里是什么?
a = 2;
console.log(a);//2
};
fn();
查了一下,说 函数声明的权重要比变量声明的权重大,同名情况下,变量声明会被忽略。这样的话,第一个console就是函数本身。事情这样结束就没意思了。再看一题。
function a(){
console.log(1);
};
var a = function(){
console.log(2);
}
a();//2
这就不对了吧。不是说好的函数声明权重大,同名的变量声明会被忽略吗?百思不得姐(解),下班路上寒风一吹,明白了….
根据变量声明提升,和函数声明提升,上面的代码可以写成下面这样。确实是函数声明权重大于变量声明,忽略了变量的声明。但是下面还有给变量a赋值的操作。再调用a();自然就是得到2这个结果了
var a;
function a (){
console.log(1);
}
console.log(a);//"function a (){}"
a = function(){
console.log(2);
}