在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 比较的更多相关文章

  1. js setTimeout和setInterval区别

    1.区别 2.示例代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...

  2. js setTimeout 与 setInterval 以及 for 循环 刷新UI

    1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式:执行一次: 如果需要执行多次,自身再次调用 setTimeout(): 示例:无穷循环并带停止按钮的 <html&g ...

  3. js setTimeout 和 setInterval 区别

    setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码.不过这两个函数还是有区别的 ...

  4. 关于js中的setTimeout和setInterval

    http://ejohn.org/blog/how-javascript-timers-work 这是John的一篇博文说到setTimeout和setInterval的区别,在看js高效图形编程的时 ...

  5. 原生js轮播以及setTimeout和setInterval的理解

    下面这个代码是从一个群下载下来的,为了帮助自己理解和学习现在贴出来,与初学者共勉. <!DOCTYPE html> <html> <head> <meta c ...

  6. js里的setTimeout和setInterval之后的页面是空白,阻塞浏览器的document对象,但是不阻塞script方法

    js里的setTimeout和setInterval是否进程阻塞? 阻塞浏览器的document对象,但是不阻塞script方法 当你在setTimeout中使用document.write时是不行的 ...

  7. js中的setTimeout和setInterval

    在html页面中要使用自动刷新功能时,可以是使用js中setTimeout和setInterval: 一.使用方法 setTimeout的使用setTimeout('要调用的Js方法', 调用的延迟时 ...

  8. js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)

    javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...

  9. 【转】JS中setTimeout和setInterval的最大延时值详解

    前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...

随机推荐

  1. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  2. oracle表分区详解

    原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...

  3. MySql + EF6 + .Net Core

    2016年8月17日01:21:29 更新:这里介绍一下一个开源的 EF Core 的 MySQL 组件 [MySQL for .NET Core - Pomelo 扩展包系列][http://www ...

  4. 制作web字体:CSS3 @font-face

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,另外@font- ...

  5. visual studio插件开发dll类库免加全局缓存处理办法

    1.卸载VSIXProject 2.然后编辑*.csproj 修改如下: 3.重新加载项目 编辑source.extension.vsixmanifest 添加资产: 完事后,直接安装VISX就可以了

  6. file_get_contents微信头像等待时间过长的原因

    UPDATE 2016/05/13 stackoverflow上的解决方法:http://stackoverflow.com/questions/3629504/php-file-get-conten ...

  7. 理解JS回调函数

    我们经常会用到客户端与Web项目结合开发的需求,那么这样就会涉及到在客户端执行前台动态脚本函数,也就是函数回调,本文举例来说明回调函数的过程. 首先创建了一个Web项目,很简单的一个页面,只有一个bu ...

  8. Ubuntu 16.04 + Caffe

    主要参考: https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide http://caffe.berke ...

  9. AlarmManager 实现闹钟的基本功能

    先上效果图 这是一个利用AlarmManager做的最简单的闹钟!迟点再把重复响铃(例如星期一,星期三,重复响铃) 1.MainActivity package com.example.domeref ...

  10. Scrum Meeting 1-20151201

    任务安排 姓名 今日任务 明日任务 困难 董元财 学习下拉刷新的实现 完成下拉刷新的实现 手机的点击动作长按和下拉有类似的地方,比较难解决 胡亚坤 学习圆形头像代码设计 完成圆形头像代码设计 无 刘猛 ...