JS中setInterval、setTimeout不能传递带参数的函数的解决方案

 更新时间:2013年04月28日 16:06:51   作者:  
在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,接下来为大家介绍具体的解决方法
在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,
这就需要想方法解决。
一、采用字符串形式:——(缺陷)参数不能被周期性改变
setInterval("foo(id)",1000);
二、匿名函数包装 (推荐)
复制代码 代码如下:

window.setInterval(function()
{
foo (id);
}, 1000);

这样就可以周期性执行foo(id)这个函数,而且把变量id传递进去;
三、定义返回无参函数的函数
复制代码 代码如下:

function foo(id)
{
alert(id);
}
function _foo(id)
{
return function()
{
foo(id);
}
}
window.setInterval(_foo(id),1000);

这里定义了一个函数_foo,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。
在 window. setInterval函数中,使用_foo(id)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。
四、修改setInterval
复制代码 代码如下:

function foo(id)
{
alert(id);
}
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);

以上的所有方法也适合setTimeout。

相关文章

  • javascript中Date()函数在各浏览器中的显示效果

    javascript中Date()函数在各浏览器中的显示效果

    本文给大家分享的是javascript中Date()函数在各浏览器中的显示效果,由于各大浏览器的兼容性问题,本文做了这个测试,希望有需要的小伙伴可以少走些弯路
    2015-06-06
  • js 获取后台的字段 改变 checkbox的被选中的状态 代码

    js 获取后台的字段 改变 checkbox的被选中的状态 代码

    js 获取后台的字段 改变 checkbox的被选中的状态 代码,需要的朋友可以参考一下
    2013-06-06
  • 前端天气插件tpwidget使用方法详解

    前端天气插件tpwidget使用方法详解

    这篇文章主要为大家详细介绍了前端天气插件tpwidget使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • 利用Pjax下载动态加载插件方案分享

    利用Pjax下载动态加载插件方案分享

    在纯静态网站里,有时候会动态更新某个区域往会选择 Pjax(swup、barba.js)去处理。本文主要和大家分享下Pjax下载动态加载插件方案,感兴趣的可以了解一下
    2022-09-09
  • javaScript中slice函数用法实例分析

    javaScript中slice函数用法实例分析

    这篇文章主要介绍了javaScript中slice函数用法,较为详细的分析了javascript中slice函数的功能、定义及使用方法,需要的朋友可以参考下
    2015-06-06
  • 必备的JS调试技巧汇总

    必备的JS调试技巧汇总

    试想一下:出现了某个bug,有人用几分钟就搞定了,有人用了半天或者一天都找不到原因所在。你愿意当前者还是后者呢?想当前者的就请好好看完本篇文章吧。文中涉及较多Gif演示动画请注意。
    2016-07-07
  • bootstrap实现tab选项卡切换

    bootstrap实现tab选项卡切换

    这篇文章主要为大家详细介绍了bootstrap实现tab选项卡切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 如何用JS判断两个数字的大小

    如何用JS判断两个数字的大小

    在JS的学习中,我们经常可能碰到这样的问题,本文用实例演示如何正确的用JS判断两个数字的大小。
    2016-07-07
  • JS正则表达式验证端口范围(0-65535)

    JS正则表达式验证端口范围(0-65535)

    这篇文章主要介绍了JS正则表达式验证端口范围(0-65535),文中给大家提到了Js正则表达式验证IP+端口号的代码,需要的朋友可以参考下
    2020-01-01
  • javascript宿主对象之window.navigator详解

    javascript宿主对象之window.navigator详解

    这篇文章主要为大家详细介绍了javascript宿主对象之window.navigator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论