今天看到了个面试题
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);}新闻热点
疑难解答