`
malson
  • 浏览: 5943 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

setTimeout与setInterval

阅读更多
setTimeout和setInterval的使用
这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。

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

不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。

虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通过创建一个函数循环重复调用setTimeout,以实现重复的操作:

File: settimeout_setinterval.js

showTime();

function showTime()

{

    var today = new Date();

    alert("The time is: " + today.toString());

    setTimeout("showTime()", 5000);

}

一旦调用了这个函数,那么就会每隔5秒钟就显示一次时间。如果使用setInterval,则相应的代码如下所示:

File: settimeout_setinterval2.js

setInterval("showTime()", 5000);

function showTime()

{

    var today = new Date();

    alert("The time is: " + today.toString());

}

这两种方法可能看起来非常像,而且显示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。

如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。


函数指针的使用
两个计时函数中的第一个参数是一段代码的字符串,其实该参数也可以是一个函数指针,不过Mac下的IE 5对此不支持。

如果用函数指针作为setTimeout和setInterval函数的第二个参数,那么它们就可以去执行一个在别处定义的函数了:

setTimeout(showTime, 500);

function showTime()

{

    var today = new Date();

    alert("The time is: " + today.toString());

}

另外,匿名函数还可以声明为内联函数:

setTimeout(function(){var today = new Date();

     alert("The time is: " + today.toString());}, 500);


讨 论
如果对计时函数不加以处理,那么setInterval将会持续执行相同的代码,一直到浏览器窗口关闭,或者用户转到了另外一个页面为止。不过还是有办法可以终止setTimeout和setInterval函数的执行。

当setInterval调用执行完毕时,它将返回一个timer ID,将来便可以利用该值对计时器进行访问,如果将该ID传递给clearInterval,便可以终止那段被调用的过程代码的执行了,具体实现如下:

File: settimeout_setinterval3.js (excerpt)

var intervalProcess = setInterval("alert('GOAL!')", 3000);



var stopGoalLink = document.getElementById("stopGoalLink");

attachEventListener(stopGoalLink, "click", stopGoal, false);



function stopGoal()

{

    clearInterval(intervalProcess);

}

只要点击了stopGoalLink,不管是什么时候点击,intervalProcess都会被取消掉,以后都不会再继续反复执行intervalProcess。如果在超时时间段内就取消setTimeout,那么这种终止效果也可以在setTimeout身上实现,具体实现如下:

File: settimeout_setinterval4.js (excerpt)

var timeoutProcess = setTimeout("alert('GOAL!')", 3000);



var stopGoalLink = document.getElementById("stopGoalLink");

attachEventListener(stopGoalLink, "click", stopGoal, false);



function stopGoal()

{

    clearTimeout(timeoutProcess);

}
分享到:
评论

相关推荐

    06_再看setTimeout与setInterval.html

    06_再看setTimeout与setInterval.html

    Javascript定时器(二)——setTimeout与setInterval

    其语法与`setTimeout`相似: ```javascript setInterval(function, interval, param1, param2, ...); ``` 其中,`interval`是执行间隔的时间(以毫秒为单位)。下面是一个每秒更新计数器的例子: ```javascript ...

    JS中的setTimeout和setInterval的区别JS中的setTimeout和setInterval的区别

    ### JS中的setTimeout与setInterval的区别 在JavaScript编程中,`setTimeout`与`setInterval`是两个非常常用的函数,用于控制代码执行的时间间隔。虽然它们在功能上有一定的相似性,但其实现的效果却大不相同。下面...

    小程序笔记—性能测试下的定时器:setTimeout与setInterval

    小程序中有两个定时器:setTimeout与setInterval setTimeout:可延时回调 setInterval:可定时循环回调 第一次这样使用: setTimeout(function(){ console.log(延时1秒回调) },1000) setInterval(function(){ ...

    JavaScript中从setTimeout与setInterval到AJAX异步

    在JavaScript中,setTimeout和setInterval是两种常见的定时器函数,用于实现异步操作。JavaScript作为单线程语言,其主线程的执行是顺序的,但是在处理某些操作,如延时任务或者周期任务时,会借助事件循环机制和回...

    js基于setTimeout与setInterval实现多线程

    本文实例讲述了js基于setTimeout与setInterval实现多线程的方法。分享给大家供大家参考,具体如下: javascript无法实现线程阻塞(sleep),原因是因为sleep涉及系统调用。js出于安全考虑是不允许系统调用的。 如果...

    关于JS定时器(setTimeout setInterval)定时不准问题1

    setInterval函数的执行机制与setTimeout相似,都是将任务添加到队列中,但不断调用函数(每次都有延迟),直到它被取消。 原因分析 由于JavaScript是一种单线程语言,异步事件(比如鼠标点击和定时器)仅在线程...

    理解javascript定时器中的setTimeout与setInterval

    与`setTimeout`一样,`setInterval`在标准浏览器和IE10以上版本也支持传递额外参数。 然而,`setTimeout`和`setInterval`在处理`this`关键字时有一个常见问题。由于它们执行的代码是在全局作用域中,因此`this`通常...

    Javascript中, setTimeout() 和 setInterval() 的方法

    与`setTimeout()`类似,`setInterval()`的第二个参数也是一个延迟时间,但区别在于它会每隔这个时间重复执行提供的函数。这也意味着,如果执行函数本身需要的时间超过设定的延迟,可能会出现函数调用的重叠。 考虑...

    setTimeout与setInterval的区别浅析

    与之相反,`setInterval` 用于周期性地执行某函数,直到被明确地停止。它的基本语法同样是 `setInterval(code, millisec)`。下面的例子每3秒钟会执行一次 `hello` 函数: ```javascript function hello() { alert...

    浅谈setTimeout 与 setInterval

    JavaScript中的`setTimeout`和`setInterval`是两个非常重要的函数,它们用于在特定时间后执行指定的函数或代码。虽然它们的语法相似,但工作原理和应用场景有所不同。 首先,`setTimeout`函数接受两个参数,一个是...

    javascript之setTimeOut和setInterval的用法

    使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。

    setTimeout和setInterval的区别

    在JavaScript中,定时执行任务是通过`setTimeout`和`setInterval`这两个函数来实现的。它们都是用于在指定延迟后执行代码,但它们之间存在显著的区别。 `setTimeout`函数用于在给定的`DelayTime`(延迟时间)过后...

    setTimeout与setInterval在不同浏览器下的差异

    在JavaScript中,`setTimeout`和`setInterval`是两个至关重要的方法,它们允许开发者在特定的时间间隔后执行函数或代码片段。尽管它们的功能相似,但它们的用途和行为有所不同。 `setTimeout`主要用于单次延迟执行...

    简单谈谈setTimeout与setInterval

    最近在做一个拍卖的微信小程序,用到了定时器setTimout和setInterval,简单谈谈这两个api。 setTimeout   (此图片来源于网络,如有侵权,请联系删除! ) 最常见的用法就是第二种(第三种mdn文档不推荐),如: var ...

    给c#添加SetTimeout和SetInterval函数.docx

    这与 JavaScript 中的 `setTimeout` 类似。下面给出具体的实现代码: ```csharp using System; using System.Timers; public static class TimerHelper { /// /// 在指定时间过后执行指定的表达式。 /// ///...

Global site tag (gtag.js) - Google Analytics