以一段javascipt代码为例分析说明

 1 function test() {
 2   var a = 0;
 3   a = 1;
 4   setTimeout(function() {
 5     alert(a);
 6     a = 1;
 7   }, 1000);
 8
 9   a = 2;
10
11   setTimeout(function() {
12     alert(a);
13     a = 3;
14   }, 3000);
15 }
16
17 test();
18
19 alert(0);

当脚本开始执行的时候,首先调用test(),代码会继续往下执行,所以alert(0)会先执行,窗口弹出0

再分析test()代码
声明变量a,并赋初值0,接着将a的值改为1
此时执行定时函数setTimeout
这里要说明一下,浏览器中有各种各样的事件,如点击事件、定时器事件等,各种事件都是以队列的方式
进入javaScript引擎的,最后按照顺序依次执行。这也从另一方面说明了JavaScript的执行方式是单线程的。
所以1000毫秒之后由定时器setTimeout产生的异步事件会进入到JavaScript引擎的队列中,但是需要注意的是
在这1000毫秒的时间内,javaScript引擎也一直在解析代码,所以接下来a被赋值为2,所以第二个弹窗中弹出
a的值为2,
由于队列是顺序执行的,所以第一个setTimeout事件后,a被赋值为1,所以第二个setTimeout中alert弹窗中
a的值为1,虽然a最后被赋值为3,但是第二个setTimeout是javascript中最后的一个事件,运行到这里脚本结束。

参考文章:

http://www.laruence.com/2009/09/23/1089.html

http://www.cnblogs.com/jeffwongishandsome/archive/2011/06/13/2080145.html

转载于:https://www.cnblogs.com/iaknehc/p/7368182.html

深入理解JavaScript定时函数setTimeout相关推荐

  1. 理解javascript 回调函数

    理解javascript 回调函数 原文:理解javascript 回调函数 ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一 ...

  2. 深入理解JavaScript定时机制

    容易欺骗别人感情的JavaScript定时器 本文地址: http://www.laruence.com/2009/09/23/1089.html 转载文章 JavaScript的setTimeout ...

  3. JavaScript可否多线程? 深入理解JavaScript定时机制

    JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...

  4. 参数 中_理解JavaScript中函数的参数

    1,arguments JavaScript的函数的参数(arguments)在函数体的内部表现为一个类似数组的对象.就是它拥有数组的方法,却不是Array的实例. 例1 我们直接打印出argumen ...

  5. 重新理解javascript回调函数

    把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于 ...

  6. 【原创翻译】深入理解javascript事件处理函数绑定三部曲(一)——早期的事件处理函数...

    原文并非是是三部曲,而是一系列讲解javascript基础的文章.我是把其中三篇抽出来,作为一个整体,对理解事件绑定模型相当有帮助,原文在这里http://www.quirksmode.org/js/ ...

  7. 理解JavaScript Call()函数原理。

    最近在做面试题的过程中偶然碰到关于call函数的问题.然后再百度上查了查.偶然看到一篇文章:JavaScript中的call.apply.bind深入理解 抛开其对call函数基本概念的介绍还有其他原 ...

  8. 理解javascript 回调函数,闭包

    回调 jQuery中一直有使用回调函数,比如:$("#btn").click(function() {alert("button clicked"); }); ...

  9. php clearinterval,JavaScript定时函数(2)setInterval与clearInterval

    setInterval的使用方法 Document 0 var hid = document.getElementById("hid"); var num = 1; functio ...

最新文章

  1. vue_组件_非prop特性
  2. 问题:循环元素,被选中元素个数,全选
  3. 2007白领职场成功需要哪“十商”
  4. 浏览器里面看到的表单数据映射到python_python爬虫入门01:教你在 Chrome 浏览器轻松抓包...
  5. Altium AD20的四层板叠层管理、平面层20H内缩
  6. Bootstrap的下拉列表点击没有用
  7. 三种网络协议的连接方式
  8. docker 内部ping不通宿主机_修改docker网段
  9. 数据禾|2001年东四盟地区植被类型分布数据
  10. Python-Selennium之爬虫实战--链家二手房爬虫项目
  11. 人工智能——单层感知器
  12. 想做AI工程师?这个案例必须掌握!(附完整代码Keras实现CNN)
  13. 浅析高速公路网络数据集制作
  14. 华硕fl5600l装固态并重装系统到固态
  15. mysql启动报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
  16. QT实现绘制箱须图(盒须图)
  17. 工作第十四周:整理收藏夹、旧文章有感
  18. 惠普硬盘测试工具_短DST未通过,手把手教你惠普笔记本如何检测硬盘
  19. 西门子LOGO PLC的通讯、数据采集知识及PLC-Recorder连接方法
  20. 华为5c_华为荣耀畅玩5C的CPU是什么?CPU主频是多少?

热门文章

  1. PyQt5 技术篇-设置窗口置顶不生效问题原因,setWindowFlags()设置参数后不生效解决办法
  2. Tomcat 最新版安装与使用手册,tomcat更改端口号方法,tomcat控制台乱码问题解决方法
  3. C# WinForm获取程序所在路径方法
  4. hdu2588 GCD
  5. 几种简单的滤波方式(未完)
  6. 爬取广州所有停车场数据(Python)
  7. java httpclient 获取cookie_java – 从httpclient 3转换为httpclient 4(Cookie策略)
  8. 扫描过程_PLC的循环扫描工作过程
  9. 设置element表格透明样式
  10. javascript中Math.random()产生随机数总结