`

如何使用定时器settimeout、setInterval执行能传递参数的函数

阅读更多

无论是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表示的是变量。但这种写法不够直观,而且有些场合必须使用函数名,于是有人想到了如下

方法(二):

<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);
//-->

分享到:
评论
4 楼 gray 2014-05-08  
正好用,谢谢
3 楼 红色贝鱼 2012-12-12  
方法二 写成这样是不是更简单、容易理解呢
function sayHello(name){
return function(){
alert("hello,"+name);
}
}
window.setInterval(sayHello("jim"),2000);
2 楼 landyme 2011-12-27  
学习了,刚好用到~
1 楼 missaaron 2010-04-27  
学习了,使用方法二进行参数传递

相关推荐

    定时器(setTimeout/setInterval)调用带参函数失效解决方法

    setInterval(code,millisec[,”lang”]) setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 参数 描述 code 必需,要调用的函数或要执行的代码串。 millisec 必需,周期性执行或调用...

    jQuery setTimeout()函数使用方法

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

    Javascript中setTimeOut和setInterval的定时器用法

    Javascript的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等等。但它们的应用是有区别的。 ...

    BOM系列第一篇之定时器setTimeout和setInterval

     以下代码中,控制台先输出0,大概过1000ms即1s后,输出定时器setTimeout()方法的返回值1 var Timer = setTimeout(function(){ console.log(Timer); },1000); console.log(0);  也可以写成字符串参数的形式,...

    setInterval阻塞解决方案完整代码

    前端开发中,我们会会经常使用定时器setinterval setTimeout等,但当我们离开页面时,定时器会被阻塞,导致我们再回到页面的时候定时任务会混乱运行,为些我的解决方案写了个简单demo,希望对你有所帮助

    vue 解决setTimeOut和setInterval函数无效报错的问题

    相信大家对着两个函数都陌生,就是一个定时器,setTimeOut只执行一次,而setInterval会重复执行 需要注意的是:在setInterval不用的时候一定要用clearSetInterval关闭定时器。 2.按照最原始的倒计时效果,实现如下:...

    JavaScript定时器setTimeout()和setInterval()详解

    setTimeout()他可以接收两个参数: 1.要执行的代码或函数 2.毫秒(在执行代码之前要等待多少毫秒) function test(){ alert&#40;"孙悟空"&#41;; } setTimeout(test,2000); //2s后弹出 “孙悟空” clearTimeout()...

    详解JS中定时器setInterval和setTImeout的this指向问题

    最近在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,详细的介绍通过一个示例展开,一起来看看吧。 如下例: var num = 0; function Obj (){ ...

    javascript中SetInterval与setTimeout的定时器用法

    Javascript的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等,本文文章通过代码示例给大家介绍...

    快速掌握Node.js中setTimeout和setInterval的使用方法

    今天先学下setTimeout和setInterval的使用。 一、setTimeout超时计时器(和GCD中的after类似) 在node.js中可以使用node.js内置的setTimeout(callback,delayMillSeconds,[args])方法。当调用setTime()时回调函数会在...

    js实现秒表以及进度条.md

    3)window.setTimeout(函数名称,时间)//延时定时器,执行一次 4)window.clearTimeout(定时器的返回值);停止定时器 2:document.getElementById() 功能:获取特定ID元素的节点 参数:ID的属性名 返回值:dom...

    理解javascript定时器中的setTimeout与setInterval

    setInterval:周期性地调用一个函数(function)或者执行一段代码。 2、语法 setTimeout: var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]); var timeoutID = window.setTimeout(code, delay...

    timerjs:setTimeout和setInterval函数的扩展。 没有jQuery

    定时器setTimeout和setInterval函数的扩展作者主页: : 当前版本v1.0.0 12/Sep/2015错误和增强功能(下一个版本)发行历史版本号日期v1.0.0 12/Sep/2015依存关系目前,此插件没有依赖项如何使用语法范例&lt;...

    浅谈对于“不用setInterval,用setTimeout”的理解

    JavaScript高级程序设计(第三版)(以下简称红宝书)22.3高级定时器中详细介绍了定时器setTimeout和setInterval,看完书后,深入理解了二者的区别,结合前辈们给我的建议“用setTimeout,不要用setInterval”,写下...

    解决js中的setInterval清空定时器不管用问题

    使用场景:我在函数A中调用定时器函数,定时器是单独写的一个函数 原因:页面加载时我调用了1次函数A,然后又单独调用了一次定时器函数,导致调用了2次setInterval(),导致有setInterval_id有2个值。 通过打印定时器...

    JS定时器使用,定时定点,固定时刻,循环执行详解

    JavaScript中有两个定时器方法:setTimeout()和setInterval()。 这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要...

    JavaScript定时器设置、使用与倒计时案例详解

    本文实例讲述了JavaScript定时器设置、使用与倒计时案例。分享给大家供大家参考,具体如下: 1、设置定时器 定时器,适用于定时执行的任务中。在BOM的window对象中,有这样的两个函数是用于设置定时器 setTimeout...

    JavaScript定时器详解及实例

    JS里设定延时: 使用SetInterval和... clearTimeout(对象) 清除已设置的setTimeout对象 clearInterval(对象) 清除已设置的setInterval对象 使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方法来

Global site tag (gtag.js) - Google Analytics