博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS代码执行顺序
阅读量:6415 次
发布时间:2019-06-23

本文共 918 字,大约阅读时间需要 3 分钟。

我们的js代码运行在浏览器环境中,浏览器的js引擎解析执行代码的时候,会有执行顺序的问题。

一 函数的执行顺序

以下这种是最符合逻辑的:先声明函数,再执行声明过的函数:

 

  

上面的代码肯定是没有问题的,如果把声明放在执行前面呢?

 

  

运行上面的代码就知道,这样也是没问题的。是不是有点奇怪。实际上,javascript解析引擎并不是一行一行地执行代码,而是一段一段地执行代码。在同一段程序的分析执行中,定义式的函数语句会被优先执行(引自:)。这段解释说明了为什么会出现这样结果。

 

如果声明跟执行在两个<script>标签里面呢?先看第一种情况:

 

  

运行上面的代码就知道,这样也没问题。这也是我们在实际开发中,经常引入外部js文件,在本页面新的<script>标签里调用外部js中的函数。实例

 

  

两个标签里的另一种情况:执行在前,声明在后,代码:

 

  

运行上面的代码就知道,函数并没有执行。因为页面上的<script>是按照顺序执行的。执行第一个<script>,这时候test()函数的声明并没有被执行。所以,会报这样的错误:test is not defined

这也给我们提示,引入外部文件的时候要小心执行顺序的问题。如果调用在前,引入在后,会出现function is not defined的错误。

二.变量执行的问题

前面看到,同一个<script>标签里,函数的调用可以在函数声明之前。类似的,变量可不可以调用在前,申明在后呢.。例子1代码:

 

  

运行上面的程序,会弹出undefined。事实上,我们在使用变量a时,a变量被声明了(注意这个,),只是a还没有被赋值而出现的undefined。以上的代码的执行顺序等价于以下的代码:

 

  

理解了这些,下面这个经常被问的问题也就会回答了:

 

  

这段代码运行的结果是什么呢?答案是undefined。因为函数里面的局部变量a覆盖了外面的全局变量a(js的变量就近原则);而test()函数里面执行的就是例子1。所以,会弹出undefined。

 

转载于:https://www.cnblogs.com/xiaochongchong/p/5549482.html

你可能感兴趣的文章
C指针练习
查看>>
web项目buildPath与lib的区别
查看>>
php对redis的set(集合)操作
查看>>
我的友情链接
查看>>
ifconfig:command not found的解决方法
查看>>
js使用正则表达式判断手机和固话格式
查看>>
计算机是怎么存储数字的
查看>>
mysql简单的单表查询详解
查看>>
mysql性能优化之Tuning-primer.sh的使用
查看>>
Unix的发展史
查看>>
CentOS改变docker默认存储池大小
查看>>
Docker存储驱动devicemapper介绍和配置
查看>>
win2008作为个人电脑用需要优化的部分
查看>>
vi教程
查看>>
yum 本地源配置问题
查看>>
从Vue.js窥探前端行业
查看>>
Linux chown改变文件所属关系命令
查看>>
android开发——获取手机SD卡的容量
查看>>
django ajax提交 Forbidden CSRF token missing
查看>>
maven常见异常
查看>>