zoukankan      html  css  js  c++  java
  • settimeout 和 setInterval

    [setTimeout]
    setTimeout(函数,延时时间[单位微妙])
    在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次

    用setTimeout实现的自动变化显示随机数的效果:

    <html>
    <head>
    <script>
    window.onload=sett;
    function sett()
    {
    document.body.innerHTML=Math.random();
    setTimeout("sett()",500);
    }
    </script>
    </head>
    <body>
    </body>
    </html>
    需要停止的话可以改成下面这样
    var intervalID = setTimeout("sett()",500);
    clearTimeout(intervalID);  

    [setInterval]
    setInterval(表达式,交互时间[单位微妙])
    则不一样,它从载入后,每隔指定的时间就执行一次表达式

    用setInterval实现的自动变化显示随机数的效果:

    <html>
    <head>
    <script>
    function sett()
    {
    document.body.innerHTML=Math.random();
    }
    setInterval("sett();", 500);
    </script>
    </script>
    </head>
    <body>
    </body>
    </html>
    若要停止可以改为下面的。
    var intervalID = setInterval("sett()",500);
    clearInterval(intervalID);  

    其实我还习惯在清除后把他设置为null 

    intervalID  = null;

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决。经网上查询后整理如下:

    例如对于函数hello(_name),它用于针对用户名显示欢

    迎信息:
    var userName="jack";
    //根据用户名显示欢迎信息
    function hello(_name){
          alert("hello,"+_name);
    }
    这时,如果企图使用以下语句来使hello函数延迟3秒执行是不可行的:
    window.setTimeout(hello(userName),3000);
    这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout函数,其结果并不是程序需要的。而使用字符串形式可以达到想要的结果:
    window.setTimeout("hello(userName)",3000);这是方法(一)

    这里的字符串是一段JavaScript代码,其中的userName表示的是变量,而且经测试,这个变量要是个全局的,如果是在某函数里面如此调用 setTimeout,而此变量只是个函数内部变量的话,是会报变量不存在的。但这种写法不够直观,而且有些场合必须使用函数名,于是有人想到了如下

    方法(二):

    <script language="JavaScript" type="text/javascript">
    <!--
    var userName="jack";
    //根据用户名显示欢迎信息
    function hello(_name){
           alert("hello,"+_name);
    }
    //创建一个函数,用于返回一个无参数函数
    function _hello(_name){
           return function(){
                 hello(_name);
           }
    }
    window.setTimeout(_hello(userName),3000);
    //-->
    </script>
    这 里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。

    另外也有人通过修改settimeout、setInterval来实现,相比是比较理想的。即下面的

    方法三:

    <script language="JavaScript" type="text/javascript">
    <!--
    var userName="jack";
    //根据用户名显示欢迎信息
    function hello(_name){
           alert("hello,"+_name);
    }//*=============================================================
    //*   功能: 修改 window.setInterval ,使之可以传递参数和对象参数    
    //*   方法: setInterval (回调函数,时间,参数1,,参数n)  参数可为对象:如数组等
    //*============================================================= 

    var __sto = setInterval;     
    window.setInterval = function(callback,timeout,param){     
        var args = Array.prototype.slice.call(arguments,2);     
        var _cb = function(){     
            callback.apply(null,args);     
        }     
        __sto(_cb,timeout);     
    }
    window.setInterval(hello,3000,userName);
    //-->

  • 相关阅读:
    Office Web Apps Server 2013与PDF(一)
    关于EF Unit of Work Repository的简单用法
    从3层开始
    使用ms owin 搭建oauth2 server
    让自己的程序支持livewriter
    angularjs 从外部改变controller内的数据
    vs2013 update 2 cordova(phonegap) 环境
    asp.net web api 跨域,带cookie
    c#与IronPython Clojure-clr的调用
    Mvc Moq HttpContext
  • 原文地址:https://www.cnblogs.com/wayne173/p/3741773.html
Copyright © 2011-2022 走看看