请问函数test最终输出的值是多少?
var a = 1;
function test() {
console.log(a);
if(false) {
var a = 2;
}
}
test();
A
1
B
2
C
undefined
D
null
正确答案:C
Javascript分为预处理阶段和执行阶段,尽管if里面的语句不会被执行,但是在预处理阶段还是会将其提升,因此最终还是undefined。
函数会先去找自己内部的变量,内部有就不会往外面找,内部没有才去外面找
var a = 1;
function test() {
console.log(a);
if(false) {
var a = 2;
}
}
test();
//其实代码执行过程如下:
var a ;
a = 1;
function test() { //函数会先去找自己内部的变量,内部有就不会往外面找,内部没有才去外面找
var a; //变量提升
console.log(a);
if(false) { //因为false没有满足if的条件,所以不能进入if语句里进行赋值
a = 2; //if语句的条件把false改成true,就可以进入if语句赋值
}
}
test();
var 声明变量的特点:没有块级作用域、存在变量提升
没有块级作用域,使 var 声明的变量在 if 语句外可以被访问
存在变量提升,使 var 声明的变量提升到当前作用域的顶部,即 test 函数内的顶部
在 test 函数作用域中,局部变量 a 覆盖了全局变量 a
变量提升只提升声明而不提升赋值,故此时 a 的值为 undefined,随后打印输出
标签:块级,变量,作用域,test,提升,var
From: https://www.cnblogs.com/longmo666/p/17835973.html