第一题
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指向一个函数,后来赋值成了一个函数表达式,指向了另一个函数。