zoukankan      html  css  js  c++  java
  • JavaScript window.setTimeout() 的详细用法

    setTimeout (表达式,延时时间)
    setTimeout(表达式,交互时间) 
    延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTimeout 在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次 
    setTimeout 在执行时,它从载入后,每隔指定的时间就执行一次表达式

    1,基本用法: 
    执行一段代码: 

    复制代码代码如下:

    var i=0; 
    setTimeout("i+=1;alert(i)",1000); 


    执行一个函数: 

    复制代码代码如下:

    var i=0; 
    setTimeout(function(){i+=1;alert(i);},1000); 


    //注意比较上面的两种方法的不同。 

    下面再来一个执行函数的: 

    复制代码代码如下:

    var i=0; 
    function test(){ 
    i+=1; 
    alert(i); 

    setTimeout("test()",1000); 


    也可以这样: 

    复制代码代码如下:

    setTimeout(test,1000); 


    总结: 
    setTimeout的原型是这样的: 
    iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage]) 

    setTimeout有两种形式 

    setTimeout(code,interval) 
    setTimeout(func,interval,args) 

    其中code是一个字符串 
    func是一个函数. 

    注意"函数"的意义,是一个表达式,而不是一个语句. 
    比如你想周期性执行一个函数 
    function a(){ 
    //... 

    可写为 
    setTimeout("a()",1000) 
    或 
    setTimeout(a,1000) 

    这里注意第二种形式中,是a,不要写成a(),切记!!! 
    展开来说,不管你这里写的是什么,如果是一个变量,一定是一个指向某函数的变量;如果是个函数,那它的返回值就 要是个函数 

    2,用setTimeout实现setInterval的功能 
    思路很简单,就是在一个函数中调用不停执行自己,有点像递归 

    复制代码代码如下:

    var i=0; 
    function xilou(){ 
    i+=1; 
    if(i>10){alert(i);return;} 
    setTimeout("xilou()",1000); 
    //用这个也可以 
    //setTimeout(xilou,1000); 


    3,在类中使用setTimeout 
    终于到正题了,其实在类中使用大家遇到的问题都是关于this的,只要解决了这个this的问题就万事无忧了。
    呵呵。让我们来分析一下: 

    复制代码代码如下:

    function xilou(){ 

    this.name="xilou"; 
    this.sex="男"; 
    this.num=0; 

    xilou.prototype.count=function(){ 
    this.num+=1; 
    alert(this.num); 
    if(this.num>10){return;} 
    //下面用四种方法测试,一个一个轮流测试。 
    setTimeout("this.count()",1000);//A:当下面的x.count()调用时会发生错误:对象不支持此属性或方法。 
    setTimeout("count()",1000);//B:错误显示:缺少对象 
    setTimeout(count,1000);//C:错误显示:'count'未定义 
    //下面是第四种 
    var self=this; 
    setTimeout(function(){self.count();},1000);//D:正确 



    var x=new xilou(); 
    x.count(); 


    错误分析: 
    A:中的this其实指是window对象,并不是指当前实例对象 
    B:和C:中的count()和count其实指的是单独的一个名为count()的函数,但也可以是window.count(),因为window.count()可以省略为count() 
    D:将变量self指向当前实例对象,这样js解析引擎就不会混肴this指的是谁了。 

    话说回来,虽然我们知道setTimeout("this.count()",1000)中的this指的是window对象,但还是不明白为什么会是 
    window对象^_^(有点头晕...) 
    那我们可以想象一下这个setTimeout是怎样被定义的: 
    setTimeout是window的一个方法,全称是这样的:window.setTimeout() 
    那应该是这样被定义的: 

    复制代码代码如下:

    window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){ 
    //.....代码 
    return timer//返回一个标记符 


    所以当向setTimeout()传入this的时候,当然指的是它所属的当前对象window了。

  • 相关阅读:
    F#新Bug,小心! module 里的泛型变量。
    F#: mutable 关键字不适宜用于结构中声明可变值
    简说F#的数组
    元组——秃瓢(Tuple)
    如何用Xmind编写测试用例
    如何提高评审的效率
    接口测试实例/20200622
    mysql数据库的基本增删改查操作总结
    面试技巧篇02:面试前必看!
    面试技巧篇01
  • 原文地址:https://www.cnblogs.com/susanws/p/5392138.html
Copyright © 2011-2022 走看看