javascript - js的执行顺序是怎样的?
问题描述
1.没弄懂js的执行顺序,执行下面代码,刚开始alert的时候,a还没有声明,不是应该直接报错吗?为什么先是显示这个function,然后显示10,显示3,最后还报错了?不是一开始就应该报错了吗?
alert(a)a();var a=3;function a(){alert(10)}alert(a)a=6;a()
问题解答
回答1:问了下同学,知道了为什么会出现那样的情况,首先要明白的概念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都不是函数,所以报错了。
回答2:第一个输出 function 是因为作用域提升(hoisting)。第二个输出 10 是第二行 a() 的输出。第三个输出 3 是倒数第三行 alert(a) 的输出。最后一个报错是来自最后一行 a()。因为这时候 a 被重新赋值为数字 6,已经不是 function 了。执行 a() 当然会报错。
回答3:变量声明提升么,记住下面几条规则就好了。
http://zonxin.github.io/post/...
相关文章:
1. javascript - 回调函数如何访问当前函数作用下的值2. javascript - H5页面怎么查看console信息?3. tornado - python使用yield是否能保证协程的顺序性?4. android 文件File删除问题5. 绝对定位和fied定位,键盘弹起对布局的影响6. javascript - vue生成一维码?求助!!!!!急7. javascript - 修改表单多选项时和后台同事配合的问题。8. mysql - 索引过滤性不好是由什么原因引起的,应该怎么解决9. nginx英文文档的WebSocket proxying部分没看太明白,麻烦推荐一点中文文章10. 网页爬虫 - Python:爬虫的中文编码问题?
