有关JS的执行顺序的问题。

在【js函数和变量的声明与执行顺序】https://www.cnblogs.com/highs... 这篇文章中看到一个地方没有理解。
https://img.mukewang.com/5ba8ace2000168e308000323.jpg

没有理解为什么第3行代码处alert的值为什么是undefined?

我的想法是,预编译期时候,js获取到了声明的var a,这个时候只是声明,并没有赋值。
然后预编译结束。
接下来开始从上往下执行代码:执行第一行 var a=1;,然后再往下执行f()的时候,调用f方法:alert(a), 这个时候不是已经执行过第一行,a已经有值了吗?

还是我绕进了什么我没出来的弯子...?

求指点


元芳怎么了
浏览 552回答 1
1回答

狐的传说

在函数内部存在var a;所以函数内部alert(a)就不会去函数外部找变量a了,在加上函数内部也存在变量提升,所以var a = 3 会将var a;提升到函数最前面。执行到第一个alert(a)的时候,a是声名了但是没有赋值。因此输出undefined. 可以对比一下代码:var a = 1;function f(){alert(a);//1a = 3;alert(a);//3}f()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript