深入理解JavaScript定时函数setTimeout
以一段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相关推荐
- 理解javascript 回调函数
理解javascript 回调函数 原文:理解javascript 回调函数 ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一 ...
- 深入理解JavaScript定时机制
容易欺骗别人感情的JavaScript定时器 本文地址: http://www.laruence.com/2009/09/23/1089.html 转载文章 JavaScript的setTimeout ...
- JavaScript可否多线程? 深入理解JavaScript定时机制
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- 参数 中_理解JavaScript中函数的参数
1,arguments JavaScript的函数的参数(arguments)在函数体的内部表现为一个类似数组的对象.就是它拥有数组的方法,却不是Array的实例. 例1 我们直接打印出argumen ...
- 重新理解javascript回调函数
把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于 ...
- 【原创翻译】深入理解javascript事件处理函数绑定三部曲(一)——早期的事件处理函数...
原文并非是是三部曲,而是一系列讲解javascript基础的文章.我是把其中三篇抽出来,作为一个整体,对理解事件绑定模型相当有帮助,原文在这里http://www.quirksmode.org/js/ ...
- 理解JavaScript Call()函数原理。
最近在做面试题的过程中偶然碰到关于call函数的问题.然后再百度上查了查.偶然看到一篇文章:JavaScript中的call.apply.bind深入理解 抛开其对call函数基本概念的介绍还有其他原 ...
- 理解javascript 回调函数,闭包
回调 jQuery中一直有使用回调函数,比如:$("#btn").click(function() {alert("button clicked"); }); ...
- php clearinterval,JavaScript定时函数(2)setInterval与clearInterval
setInterval的使用方法 Document 0 var hid = document.getElementById("hid"); var num = 1; functio ...
最新文章
- vue_组件_非prop特性
- 问题:循环元素,被选中元素个数,全选
- 2007白领职场成功需要哪“十商”
- 浏览器里面看到的表单数据映射到python_python爬虫入门01:教你在 Chrome 浏览器轻松抓包...
- Altium AD20的四层板叠层管理、平面层20H内缩
- Bootstrap的下拉列表点击没有用
- 三种网络协议的连接方式
- docker 内部ping不通宿主机_修改docker网段
- 数据禾|2001年东四盟地区植被类型分布数据
- Python-Selennium之爬虫实战--链家二手房爬虫项目
- 人工智能——单层感知器
- 想做AI工程师?这个案例必须掌握!(附完整代码Keras实现CNN)
- 浅析高速公路网络数据集制作
- 华硕fl5600l装固态并重装系统到固态
- mysql启动报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
- QT实现绘制箱须图(盒须图)
- 工作第十四周:整理收藏夹、旧文章有感
- 惠普硬盘测试工具_短DST未通过,手把手教你惠普笔记本如何检测硬盘
- 西门子LOGO PLC的通讯、数据采集知识及PLC-Recorder连接方法
- 华为5c_华为荣耀畅玩5C的CPU是什么?CPU主频是多少?
热门文章
- PyQt5 技术篇-设置窗口置顶不生效问题原因,setWindowFlags()设置参数后不生效解决办法
- Tomcat 最新版安装与使用手册,tomcat更改端口号方法,tomcat控制台乱码问题解决方法
- C# WinForm获取程序所在路径方法
- hdu2588 GCD
- 几种简单的滤波方式(未完)
- 爬取广州所有停车场数据(Python)
- java httpclient 获取cookie_java – 从httpclient 3转换为httpclient 4(Cookie策略)
- 扫描过程_PLC的循环扫描工作过程
- 设置element表格透明样式
- javascript中Math.random()产生随机数总结