惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 刀魂

CSS 行级元素和块级元素区别 ‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件 VS2003"无法启动调试 没有正确安装调试器"的解决办法 NHibernate VS IbatisNet Javascript Array和String的互转换。 Assembly.Load 失败。 setInterval 启用和停止,见代码 运行DB2Cmd打不开,找不到文件,Quest for db2 打开报错。unable 关于Jquery中ajax方法data参数用法的总结 vs2005新建项目中没有ASP.NET WEB应用程序的解决方法 卸载sql 2005后,打开sql 2000企业管理器 提示sql mmc无法创建管理单元 VS2003:--------关于"您试图打开的项目是WEB项目,需要通过指定其"Url"路径来打开 Jquery知识小点: ASP.NET 运行设置了断点,但是怎么也无法进去。 工具VS2003. 在ASP.NET MVC中使用DropDownList引用。呵呵。 sql2005:sa用户无法登陆。 orcl基础小知识。 javascript知识补充学习 多线程与Invoke,Beginvoke
Javascript中的setTimeout和setInterval函数区别
刀魂 · 2012-08-29 · via 博客园 - 刀魂

从几年前(有5年多)一直到现在,在很多讲解Javascript的资料中看过setTimeout和setInterval这两个函数,一直就是以为它们俩的功能是完全一样的--就是多久时间后执行一下了事,所以一直用的就是setTimeout函数,还从来在自己的代码中没用过setInterval函数,其实为什么就不再进一步想想,如果这两个函数功能完全一样,为啥有存在的合理性。
到现在我才对两个函数的一致性表现出惯于怀疑来,到网上Google一下,才恍然大悟。原来是有区别的,首先从其中的两个单词来理解也可以看出一点名堂来:
Timeout:<主美>(球类比赛中的)暂时休息,(工作时的)工间休息;计算机里多为"超时",或者"时间到了"的意思
Interval:间隔, 距离, 幕间休息,时间间隔
由他们各自代表的 setTimeout 函数表时指定的时间到了,执行某个指定的函数,这时候它的使命即告完成,只执行一次。setInterval 函数则是每隔指定的时间就会执行指定的函数,如果不清除,将执行无数次。setInterval函数的行为更像是很多编程语言中的Timer控件的行为。
清除计数器的函数分别是 clearTimeout 和 clearInterval, 功能说明如下
var timer1 = setTimeout("foo",1000);  //设定foo函数将在1000毫秒后执行一次
.........//do something
clearTimeout(timer1); //如果程序执行到这里,以setTimeout开始计数时1000毫秒未到,
                                //clearTimeout后,foo将得不到执行
                                //如果1000毫秒已过,foo已被触发执行,就没什么意义了
vartimer2 = setInterval("foo",1000); //设定从现在计时起,每1000毫秒执行1次foo
.........//do something
clearInterval(timer2);  //以后foo将不再触发执行了
所以这样一个细节的被忽略了,也就长久以来用setTimeout+递归来模拟了setInterval的行为,如下代码
function foo(){
    .......//do something
    setTimeout("foo",1000);
}
上面代码是不是看起来与setInterval的表现一样的啊,仅仅是三行倒也好理解,似乎也没复杂多少,但是现成的简单一点的东西为什么不直接拿来用呢?

posted on 2012-08-29 21:32  刀魂  阅读(469)  评论()    收藏  举报