`

setTimeout()

    博客分类:
  • JS
阅读更多
JavaScript里的这两个定时器函数,大家一定耳熟能详:

setTimeout("函数()",毫秒)就是开启一个计时器,指定毫秒后执行该函数一次。 
有关定时器,javascript还有另一个类似的函数,setInterval("函数()",毫秒)。不同的是,setInterval不是指定时间后执行一次该函数,而是每隔指定时间执行该函数,连续不断,直到clearInterval()。

问题是,在实际使用过程中,发现javascript的定时器很不靠谱。说好的多少多少时间后执行,但给人的感觉是忽快忽慢。明明指定3秒后执行,竟然5、6秒后才触发,或者不到1秒就触发了!

查阅资料,说是javascript为单线程,setTimeout之后,就注册了一个事件,进入排队,有空才执行,所以就慢了。大意如此。但快的情况呢?好像没说。

javascript引擎只有一个线程,迫使异步事件只能加入队列去等待执行。 
在执行异步代码的时候,setTimeout 和setInterval 是有着本质区别的。 
如果计时器被正在执行的代码阻塞了,它将会进入队列的尾部去等待执行直到下一次可能执行的时间出现(可能超过设定的延时时间)。 
如果interval回调函数执行需要花很长时间的话(比指定的延时长),interval有可能没有延迟背靠背地执行。 
上述这一切对于理解js引擎是如果工作的无疑是很重要的知识,尤其是大量的典型的异步事件发生时,对于构建一个高效的应用代码片段来说是一个非常有利的基础。


setTimeout的时候,记录当前时间戳 
函数触发时,将时间戳与当前时间比较,看是否已经经过指定的毫秒数 
时间未够,则继续setTimeout,步长可改为1秒 
否则执行


<html>
<head>
</head>
<body>
<input type="button" value="开启" onclick="start()" />
</body>
</html>
<script type="text/javascript">
    var t;
    var marktime = 0;
    var offset = 3000;
    function start(){
        marktime = new Date().getTime();//1970年1月1日以来的毫秒数
        t = setTimeout("hi()",offset);//3000毫秒后触发
    }
    function hi(){
        if (new Date().getTime() - marktime < offset) {//时间未够
            t = setTimeout("hi()",1000);//一秒后再来看看
            return;
        }
        alert("Hello World!");
    }
</script>

至于clearTimeout,经测试
var t = setTimeout("hi()",1000);
clearTimeout();//不起任何作用
clearTimeout(t);//将计时器t消除
setTimeout的作用,就是注册一个计时器,计时器之间各自独立,不会覆盖和干扰;注册多少遍,就有多少个,执行指定函数后自己释放。所以每次setTimeout,应该获取返回值,以便操控:
var t = setTimeout("hi()",1000);
clearTimeout(t);//将计时器t消除


转自:http://blog.csdn.net/leftfist/article/details/51615164    谢谢!
分享到:
评论

相关推荐

    解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题

    关于在Vue中管理setTimeout和setInterval,尤其是涉及到Vue的路由切换时定时器未被销毁的问题,主要涉及到Vue的生命周期钩子、JavaScript的this关键字以及ES6箭头函数的特性。 首先,Vue中的生命周期钩子允许我们在...

    jQuery setTimeout()函数使用方法

    setTimeout()从载入后延迟指定的时间去执行一个表达式或者是函数;仅执行一次 ;和window.clearTimeout一起使用.我在 代码如下:$(document).ready(function(){setTimout(test(),200); function test() { alert&#40;1&#...

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

    在JavaScript编程中,`setTimeout()`和`setInterval()`是两个非常关键的函数,它们用于实现异步编程,特别是在处理动画、定时任务或者延迟执行代码时不可或缺。这两个函数都是全局对象`window`的方法,它们的区别...

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

    关于JS定时器(setTimeout setInterval)定时不准问题1 在JavaScript中,setTimeout和setInterval是两个基本的定时器函数,用于实现延迟执行或循环执行某个函数。然而,这两个函数在执行时往往和我们设置的延迟时间...

    模态对话框导致setTimeout失效的解决方案(一)

    在IT行业中,我们经常遇到各种各样的问题,其中之一就是在使用模态对话框时,发现`setTimeout`函数似乎不再按照预期工作。这个问题主要出现在JavaScript编程环境中,尤其是在与UI交互时。模态对话框,如Bootstrap的...

    setTimeout应用(模拟站长之家导航)

    在JavaScript编程中,`setTimeout`是一个非常重要的函数,它用于在指定的时间(以毫秒为单位)后调用一个函数或者执行某段代码。在这个场景中,标题提到的"setTimeout应用(模拟站长之家导航)"可能是指利用`...

    JavaScript中SetInterval与setTimeout的用法详解

    setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止 参数 描述 code 必需,要调用的...

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

    在这个主题中,我们将深入探讨`setTimeout`和`setInterval`这两个核心定时器函数,它们在JavaScript中的应用以及它们之间的区别。 首先,`setTimeout`函数用于在指定的毫秒数后调用一个函数或执行一段代码。它的...

    利用setTimeout解决延时执行某操作

    setTimeout,javascript 延时执行函数,闭包处理 利用javascript闭包处理延时操作

    向setTimeout传递函数参数

    在JavaScript编程中,`setTimeout`是一个非常常用的函数,它用于在指定的时间(以毫秒为单位)后调用一个函数或者执行某段代码。这个功能对于实现延迟执行、动画效果或者定时任务等场景非常关键。在本文中,我们将...

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

    ### 给C#添加SetTimeout和SetInterval函数 在日常的软件开发过程中,我们经常会遇到需要定时执行某些任务的情况。JavaScript 提供了 `setTimeout` 和 `setInterval` 这两个非常方便的函数来处理这样的需求。然而,...

    JavaScript_window.setTimeout()_的详细用法

    ### JavaScript中的`window.setTimeout()`详解 #### 一、概述 在JavaScript编程中,`window.setTimeout()`函数是一个非常重要的异步编程工具,它允许开发者在指定的时间后执行特定的代码片段。这一特性对于实现...

    模态对话框导致setTimeout无效的解决方案(二)

    然而,有时在模态对话框打开时,JavaScript的`setTimeout`函数可能会表现得不按预期,导致延迟执行的代码无法正常工作。本篇文章将深入探讨这个问题,并提供有效的解决方案。 `setTimeout`是一个异步执行的函数,它...

    围绕setTimeout的一个微型28字节Promise封装

    本文将深入探讨一个围绕`setTimeout`函数的微型Promise封装,它只有28字节,但却能实现基本的异步操作。这个封装在JavaScript开发中尤其适用于轻量级任务,例如延迟执行、非阻塞UI更新等场景。 首先,让我们来看看...

    设置setTimeout函数,定时执行封装好的逻辑单元

    使用javascript方法settimeout()函数来定时跳转页面。

    javascript之setTimeOut和setInterval的用法

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

    使用setTimeout()方法模拟进度条

    使用setTimeout()方法模拟进度条

    java后台定时器最简单用法实例,类似于js里的setTimeOut

    java后台定时器最简单用法实例,类似于js里的setTimeOut

    JS中setTimeout()的用法详解

    ### JS中setTimeout()的用法详解 #### setTimeout()概述 `setTimeout()` 是JavaScript中用于设置一个函数或代码段在指定时间后执行的函数。它是`window`对象的一个方法,通常被用于异步编程、设置延时任务、动画...

    JavaScript中setTimeout的那些事儿

    其中,setTimeout是JavaScript提供的一个非常重要的定时执行函数,它允许开发者设定代码在未来的某个时间点执行。尽管JavaScript是单线程的,但是通过setTimeout等机制,JavaScript能够实现非阻塞的异步编程模型。...

Global site tag (gtag.js) - Google Analytics