搜索
javascript - js的执行顺序是怎样的?
phpcn_u1582
phpcn_u1582 2017-06-26 10:58:23
[JavaScript讨论组]

1.没弄懂js的执行顺序,执行下面代码,刚开始alert的时候,a还没有声明,不是应该直接报错吗?为什么先是显示这个function,然后显示10,显示3,最后还报错了?不是一开始就应该报错了吗?

alert(a)
a();
var a=3;
function a(){
alert(10)
}
alert(a)
a=6;
a()

phpcn_u1582
phpcn_u1582

全部回复(3)
ringa_lee

问了下同学,知道了为什么会出现那样的情况,首先要明白的概念
1.js中,变量声明和函数声明是会提前的,并且函数声明会优于变量声明。所以,在声明a之前alert(a),并不会报错。以及,第一个alert,出现的是a这个function,并不是变量a。
2.第二个alert,无需多言,只是执行a这个函数。
3.第三个alert,结果是3,因为运行到了这里之前,执行了 var a=3;。所以a变成了3。
4.最后报错是因为,执行到a();a进行了两次赋值,第一次是var a=3;,第二次是a=6;,但是无论怎样,a都不是函数,所以报错了。

伊谢尔伦

第一个输出 function 是因为作用域提升(hoisting)。
第二个输出 10 是第二行 a() 的输出。
第三个输出 3 是倒数第三行 alert(a) 的输出。
最后一个报错是来自最后一行 a()。因为这时候 a 被重新赋值为数字 6,已经不是 function 了。执行 a() 当然会报错。

某草草

变量声明提升么,记住下面几条规则就好了。

http://zonxin.github.io/post/...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号