在【js函数和变量的声明与执行顺序】https://www.cnblogs.com/highs... 这篇文章中看到一个地方没有理解。没有理解为什么第3行代码处alert的值为什么是undefined?我的想法是,预编译期时候,js获取到了声明的var a,这个时候只是声明,并没有赋值。然后预编译结束。接下来开始从上往下执行代码:执行第一行 var a=1;,然后再往下执行f()的时候,调用f方法:alert(a), 这个时候不是已经执行过第一行,a已经有值了吗?还是我绕进了什么我没出来的弯子...?求指点
1 回答

狐的传说
TA贡献1804条经验 获得超3个赞
在函数内部存在var a;所以函数内部alert(a)就不会去函数外部找变量a了,在加上函数内部也存在变量提升,所以var a = 3 会将var a;提升到函数最前面。执行到第一个alert(a)的时候,a是声名了但是没有赋值。因此输出undefined. 可以对比一下代码:
var a = 1;
function f(){
alert(a);//1
a = 3;
alert(a);//3
}
f()
添加回答
举报
0/150
提交
取消