您的位置:首页 > Web前端 > JavaScript

8dee 关于javascript变量声明、函数声明提升的问题

2017-02-08 21:36 561 查看
今天看到了个面试题

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: