JavaScript中setTimeout和setInterval的使用

相同点:这两个方法都可以用来实现在一个固定的时间之后去实现JavaScript代码,两个方法都包含有两个参数,第一个是将要执行的代码字符串,第二是以毫秒为单位的时间间隔,当过了这个时间间隔之后就会执行第一个参数中的代码字符串。

不同点:setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码。而setTimeout则仅仅是执行一次代码。

使用定时器调用带有参数的函数的时候直接为该函数的参数赋值形式如下:

一、采用字符串的形式:

1、window.setTimeout("alert('ok')",1000);

2、var msg="ok";

  window.setTimeout("alertMsg(msg)",1000);

  function alertMsg(pmsg)

  {

    alert(pmsg);

  }

当我们调用的函数中含有定时器,并且需要通过该函数为定时器进行传值的时候该怎么办呢?这时我们需要使用类似以下形式的代码方能将参数传递给定时器。

function interval(msg)

{

  setInterval("tip('"+msg+"')",1000);

}

function tip(msg)

{

  alert(msg);

}

window.οnlοad=function(){

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

  btnClick.οnclick=function(){

  interval("带有参数的定时器的使用");

  }

}

此上两种方法用于传递字符串,无法用于传递对象。

二、采用匿名函数的形式:

setInterval(function(){resize(currentObj,nexObj);},2000);

resize(currentObj,nextObj){}

以上示例对于在传递的参数是对象的时候使用。

三、在有些情况下需在循环中使用,如:
window.οnlοad=function(){
       var a=[{id:1},{id:2},{id:3},{id:4}];
       for(var i=0;i<3;i++){          
    setTimeout(function(){start(a[i])},1000);
       }
}
function start(obj){ alert(obj.id);}
输出的结果都为 4。因为在一个函数体中,a和i相对于匿名函数是全局的,循环执行完后i=3,都执行start(a[3]),所以输出结果相同。这种情况怎么解决呢,只需把setTimeout封装到一个函数中即可
window.οnlοad=function(){      
var a=[{id:1},{id:2},{id:3},{id:4}];
       for(var i=0;i<3;i++){
            set(a[i]);
       }
}
function set(obj){ 

  setTimeout(function(){start(obj)},1000);  
}
obj和匿名函数在同一作用域,所以在匿名函数中可以直接访问obj,而且每次执行setTimeout时都会产生新的匿名函数体和作用域,所以定时执行匿名函数时调用start并传值就不会出问题了。(此为个人的理解,不一定正确)
function
start(obj){ alert(obj.id);}
在网上看到有人封装了一个函数,也可实现该功能
var util={
  setTimeout:function(fun, delay) {
      if(typeof fun == 'function'){
      var argu = Array.prototype.slice.call(arguments,2);
      var f = (function(){     
    fun.apply(null, argu);
      });
      return window.setTimeout(f, delay);
      }
      return
      window.setTimeout(fun,delay);
   }
}
window.οnlοad=function(){      
       var a=[{id:1},{id:2},{id:3},{id:4}];
       for(var i=0;i<3;i++){
             util.setTimeout(start,1000,a[i]);
       }
}

注意:1、这里函数中的参数在定义的时候不能使用var关键字。

     2、在为onclick事件绑定带有参数的函数的时候需要使用匿名函数调用绑定函数的形式。

待续……

转载于:https://www.cnblogs.com/dolphin-gjh/p/3533655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值