变量声明提升和函数声明提升--------函数先于变量声明

160 阅读1分钟

第一题

console.log(a)       //       undefined
var a = 1;
var getNum = function() {
    a = 2;
}
function getNum() {
    a = 3;
}
console.log(a)      //        1
getNum()
console.log(a)      //        2

这道题主要考查声明提升和函数声明先于变量声明这两个知识点。在解析这个js片段的时候是按照这样的顺序:

// 声明提升

function getNum() { a = 3; }

var a;

var getNum;

console.log(a);

a = 1;

getNum = function() { a = 2; }

console.log(a)

getNum()

console.log(a) 这样就很清晰了,第一次输出a的时候仅仅是声明了还没有赋值,所以是undefined。第二次的不用说了。第三次输出2是因为,变量声明是无法覆盖函数声明的,一开始getNum指向一个函数,后来赋值成了一个函数表达式,指向了另一个函数。