关于setTimeout进行参数传递时定时任务失效的解决办法

时间:2021-01-05 07:56:38

        最近在做项目之前已经会用这个方法,但是在工作的时候遇到一个需求,要通过这个方法传参数,一下就懵了,以前使用这个方法来做定时任务的时候一直没有传过参数,现在做完了才分享一下.

        1.首先不传参数的使用

        function timeTest(){

           alert("执行了");

      }

      window.setTimeout(timeTest(),3000);//3秒之后执行,也可以这样window.setTimeout('timeTest',3000);

      这个是比较简单的。


       2.那么传参数不应该是一样吗,那么接下来我们就一起来看一下区别.

        function timeTest(obj){

               alert(obj);      

           }

        var id = 123;

       2.1

      window.setTimeout(timeTest(id),3000)//注:这样的话该方法会立即执行,这个定时任务就会失效。

      那么下面这样行不行呢?

       2.2

      window.setTimeout('timeTest(id)',3000);//注:这样也是不行的他会把timeTest(id)看成方法体,会找不到方法

.

      那么都不行,我们应该怎么做呢?

     3

     既然2.2中定时任务中的方法会立即执行,那么我们能不能在立即执行的方法中返回一个方法来作为定时任务方法呢,答案是可行的,接着看下面的。

     3.1

 function timeTest(obj){//希望延迟执行的方法

 alert(obj);         

     function time(obj){//立即执行并返回一个无参方法供3秒后执行.

          return function(){

                   timeTest(obj);

}

}

        window.setTimeout(time(id),3000);

这样就setTimeout()方法就可以进行参数传递了,当然还有其他方法,有兴趣的朋友可以自己研究。

<script src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var allThis = this;
function timeTest(thiz) {
return function(){
timeTest2(thiz);}
}
function timeTest2(obj){
console.log(obj);
}
console.log(this);
setTimeout(timeTest(this),3000);

});
</script>