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实现ASP分页函数 HTML分页函数
Sep 22 Javascript
IE JS编程需注意的内存释放问题
Jun 23 Javascript
jquery.post用法示例代码
Jan 03 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
JavaScript中exec函数用法实例分析
Jun 08 Javascript
javascript实现数组去重的多种方法
Mar 14 Javascript
jquery+CSS3实现3D拖拽相册效果
Jul 18 Javascript
将json转换成struts参数的方法
Nov 08 Javascript
angular4模块中给标签添加背景图的实现方法
Sep 15 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 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 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Python中int()函数的用法浅析
2017/10/17 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
Python实现12306火车票抢票系统
2019/07/04 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
庆七一活动方案
2014/01/25 职场文书
《乞巧》教学反思
2014/02/27 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
js不常见操作运算符总结
2021/11/20 Javascript