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得到网页中所有的div的id
Oct 19 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
js简单抽奖代码
Jan 16 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
Feb 22 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
基于vue的换肤功能的示例代码
Oct 10 Javascript
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
Sep 21 Javascript
jquery树形插件zTree高级使用详解
Aug 16 jQuery
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
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python常用库推荐
2016/12/04 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
浅析Python的命名空间与作用域
2020/11/25 Python
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
几个数据库方面的面试题
2016/07/01 面试题
办公室前台的岗位职责
2013/12/20 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2014年食堂工作总结
2014/11/20 职场文书
2014年应急工作总结
2014/12/11 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书