函数作用域中定义在后面的变量能被前面的表达式访问到吗?
function test(){
alert(a);
var a = 10;
}
test();
运行结果是 Undefined 。这与书上写的 “函数中的任何位置定义的变量在该函数中的任何地方都可见(《javascript语言精粹》第36页)” 似乎是矛盾的。想请教各位,我可能在什么地方理解有误。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不矛盾的,JavaScript会加载或者说是解析两次
第一次:解析加载变量声明,函数声明,对函数的参数赋值
第二次:给变量赋值,执行函数
因为js是顺序加载,即从上到下,所以在函数中,的加载顺序是这样的:
总结:
变量提升(hoist),这段代码相当于:
这段代码在c语言中是不能运行的,因为a变量未定义啊,但javascript中可以啊,a定义了,只是没赋值。
你把下面var a = 10;注释掉 就看出区别来了