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


Posted in Javascript onApril 28, 2013

在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 相关文章推荐
js版本A*寻路算法
Dec 22 Javascript
JavaScript Prototype对象
Jan 07 Javascript
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
完美解决js传递参数中加号和&号自动改变的方法
Oct 11 Javascript
利用React-router+Webpack快速构建react程序
Oct 27 Javascript
JQuery validate 验证一个单独的表单元素实例
Feb 17 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
简单理解Vue中的nextTick方法
Jan 30 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
js实现滑动滑块验证登录
Jul 24 Javascript
vant 中van-list的用法说明
Nov 11 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 #Javascript
js自动下载文件到本地的实现代码
Apr 28 #Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 #Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
Apr 27 #Javascript
JQuery onload、ready概念介绍及使用方法
Apr 27 #Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 #Javascript
javascript中强制执行toString()具体实现
Apr 27 #Javascript
You might like
PHP 字符串操作入门教程
2006/12/06 PHP
JS 统计时间
2021/03/09 Javascript
可实现多表单提交的javascript函数
2007/08/01 Javascript
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python抓取电影天堂电影信息的代码
2016/04/07 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python GUI编程完整示例
2019/04/04 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
数控个人求职信范文
2014/02/03 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
房产公证书范本
2014/04/10 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
社会发展项目建议书
2014/08/25 职场文书
委托证明书
2014/09/17 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
springboot实现string转json json里面带数组
2022/06/16 Java/Android