猜一猜下边这段 js 代码运行后,弹窗 a 的值是多少?
var a = 12;
function abc() {
alert(a);
var a = 10;
}
abc();
凑个字数,下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
下面公布答案
答案是: undefined
解释:
javascript 代码的运行氛围两个阶段:
-
解析(编译)阶段: 语法检查,对变量及函数进行声明
-
运行阶段:变量的赋值,代码流程的执行
因为 alert(a)打印的是局部变量,虽然var a = 10 在下方,但是在第一阶段已经将全部的变量进行声明了,而代码的执行在第二阶段,所以会认为已经定义了局部变量 a,但是 a 还没有被赋值,因为有了局部变量声明,就不会再去使用外部的全局变量 a 的定义了。
参考:
1.JavaScript入门与实战
https://edu.aliyun.com/course/314202/lesson/8044