js:setTimeout 与 setInterval 比较
在javascript中有两个非常有用的函数:setTimeout 和setInterval ,都是定时器;但是两者存在着一些区别;
1. setTimeout函数
用法:setTimeout(fn,time);
解释:在time毫秒之后执行函数fn
示例:
function setTimeoutTest(){
alert(“函数开始执行”); //第一步
setTimeout(function(){ //第二步
alert("定时器生效"); //定时程序
},1000);
alert("函数执行完了"); //第三步
}
下面一段话来自网络,可靠性待考证;
代码解释:函数由三步构成,第一步:alert("函数开始执行"); 浏览器弹出提示框;第二步setTimeout()函数将其第一个参数(匿名函数)插入js执行队列中,等待1000毫秒后执行。第三步是:alert("函数执行完了");js程序是单线程的,所有要执行的操作都是有序的存在于执行队列中的。当调用setTimeoutTest函数,第一步会立即执行,这个是毫无疑问的,js程序是按照先后顺序执行的,所以来到第二步,但是第二步设置了定时器,所以程序不会立即执行。执行跳到第三部,会立即执行,这也是毫无疑问的。这样,三个弹窗的顺序就为:1-3-2。现在要考虑的问题是:setTimeout函数中的程序在所设置的1000毫秒后是否立即执行?而只是将程序插入到执行队列中,然后跳过具体的执行程序,这样第二步执行的弹窗在第三步之后,现在更总要的问题是:1000秒后第二步所设置的定时器一定会执行吗?第二步程序会在整个setTimeoutTest函数执行完成后执行。假如第三步的执行时间小于1000毫秒,则执行完成后队列中已经没有了待执行的程序,则第二步会在1000毫秒后执行。假如第三步的执行时间大于1000毫秒,则当1000毫秒后第二步程序仍然处在执行ing状态,js解释器不会停下当前的工作去处理定时程序,所以第二步将在第三步程序执行完成后执行(此时已超过了1000毫秒)。
2. setInterval 函数
用法:setInterval(fn,time)
解释:以time为周期调用函数fn;
示例:
function say(){
setInterval(alert("hello world!"),1000);
}
say();
程序会在say函数执行的时间点为起始点,距起始点1000毫秒调用alert("hello world!"),以alert()被执行的点为t1点,距t1点1000毫秒时再次条用alert(),依次类推,递归调用。
js:setTimeout 与 setInterval 比较的更多相关文章
- js setTimeout和setInterval区别
1.区别 2.示例代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...
- js setTimeout 与 setInterval 以及 for 循环 刷新UI
1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式:执行一次: 如果需要执行多次,自身再次调用 setTimeout(): 示例:无穷循环并带停止按钮的 <html&g ...
- js setTimeout 和 setInterval 区别
setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码.不过这两个函数还是有区别的 ...
- 关于js中的setTimeout和setInterval
http://ejohn.org/blog/how-javascript-timers-work 这是John的一篇博文说到setTimeout和setInterval的区别,在看js高效图形编程的时 ...
- 原生js轮播以及setTimeout和setInterval的理解
下面这个代码是从一个群下载下来的,为了帮助自己理解和学习现在贴出来,与初学者共勉. <!DOCTYPE html> <html> <head> <meta c ...
- js里的setTimeout和setInterval之后的页面是空白,阻塞浏览器的document对象,但是不阻塞script方法
js里的setTimeout和setInterval是否进程阻塞? 阻塞浏览器的document对象,但是不阻塞script方法 当你在setTimeout中使用document.write时是不行的 ...
- js中的setTimeout和setInterval
在html页面中要使用自动刷新功能时,可以是使用js中setTimeout和setInterval: 一.使用方法 setTimeout的使用setTimeout('要调用的Js方法', 调用的延迟时 ...
- js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)
javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...
- 【转】JS中setTimeout和setInterval的最大延时值详解
前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...
随机推荐
- hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系
hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...
- oracle表分区详解
原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...
- MySql + EF6 + .Net Core
2016年8月17日01:21:29 更新:这里介绍一下一个开源的 EF Core 的 MySQL 组件 [MySQL for .NET Core - Pomelo 扩展包系列][http://www ...
- 制作web字体:CSS3 @font-face
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,另外@font- ...
- visual studio插件开发dll类库免加全局缓存处理办法
1.卸载VSIXProject 2.然后编辑*.csproj 修改如下: 3.重新加载项目 编辑source.extension.vsixmanifest 添加资产: 完事后,直接安装VISX就可以了
- file_get_contents微信头像等待时间过长的原因
UPDATE 2016/05/13 stackoverflow上的解决方法:http://stackoverflow.com/questions/3629504/php-file-get-conten ...
- 理解JS回调函数
我们经常会用到客户端与Web项目结合开发的需求,那么这样就会涉及到在客户端执行前台动态脚本函数,也就是函数回调,本文举例来说明回调函数的过程. 首先创建了一个Web项目,很简单的一个页面,只有一个bu ...
- Ubuntu 16.04 + Caffe
主要参考: https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide http://caffe.berke ...
- AlarmManager 实现闹钟的基本功能
先上效果图 这是一个利用AlarmManager做的最简单的闹钟!迟点再把重复响铃(例如星期一,星期三,重复响铃) 1.MainActivity package com.example.domeref ...
- Scrum Meeting 1-20151201
任务安排 姓名 今日任务 明日任务 困难 董元财 学习下拉刷新的实现 完成下拉刷新的实现 手机的点击动作长按和下拉有类似的地方,比较难解决 胡亚坤 学习圆形头像代码设计 完成圆形头像代码设计 无 刘猛 ...