关于js声明提前
Apr 3, 2016
在一次笔试中碰到,得到面试官的指导。
题目大概是这样:
var a = 10;
function test(){
a = 1;
console.log(a);
var a;
console.log(a);
}
test(); // 1 1
console.log(a); // 10
在test函数中,先 var a; 单纯的变量声明,会在同级函数中进行声明提前, 类似于 function 可以放到执行时的后面一样, 所以 test()中 a 声明为了一个局部变量,相当于 var a; a = 1; 操作。
变化与思考:
var a = 10;
function test(){
a = 1;
console.log(a);
var a = 20;
console.log(a);
}
test(); // 1 20
console.log(a); // 10
发现没? var a = 20 这部分相当于完成了两个操作, 1: 声明提前,将 a 设置为局部变量, 2:当执行到var a = 20时, 将a赋值为20。
验证:
var a = 10;
function test(){
console.log(a);
var a;
console.log(a);
}
test(); // undefined undefined
console.log(a); // 10
var a 声明提前,但没有赋值, 所以 undefined。
var a = 10;
function test(){
console.log(a);
var a = 1;
console.log(a);
}
test(); // undefined 1
console.log(a); // 10
同样的思路: 声明提前,a为局部变量,一开始未赋值, 为 undefined,后面赋值为 1