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 相关文章推荐
Tab页界面 用jQuery及Ajax技术实现(php后台)
Oct 12 Javascript
js使用心得分享
Jan 13 Javascript
html的DOM中document对象forms集合用法实例
Jan 21 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
jQuery layui常用方法介绍
Jul 25 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
JS闭包与延迟求值用法示例
Dec 22 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
深入浅析vue中cross-env的使用
Sep 12 Javascript
vue 解决provide和inject响应的问题
Nov 12 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
mysql 搜索之简单应用
2007/04/27 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
js查错流程归纳
2012/05/04 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
Python运算符重载详解及实例代码
2017/03/07 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
快速了解Python中的装饰器
2018/01/11 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
面向对象编程的优势是什么
2015/12/17 面试题
毕业自我评价范文
2013/11/17 职场文书
学年末自我鉴定
2014/01/21 职场文书
大型晚会策划方案
2014/02/06 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
大学生入党自荐书
2015/03/05 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
获奖感言范文
2015/07/31 职场文书
R9700摩机记
2022/04/05 无线电
Python创建SQL数据库流程逐步讲解
2022/09/23 Python