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 相关文章推荐
JavaScript学习历程和心得小结
Aug 16 Javascript
Jquery easyUI 更新行示例
Mar 06 Javascript
jquery 实现两级导航菜单附效果图
Mar 07 Javascript
Js apply方法详解
Feb 16 Javascript
JavaScript模块详解
Dec 18 Javascript
详解Immutable及 React 中实践
Mar 01 Javascript
javaScript产生随机数的用法小结
Apr 21 Javascript
一步步教你利用Docker设置Node.js
Nov 20 Javascript
浅谈Angular7 项目开发总结
Dec 19 Javascript
微信小程序解析富文本过程详解
Jul 13 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 Javascript
对vue生命周期的深入理解
Dec 03 Vue.js
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 curl选项列表(超详细)
2013/07/01 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
pytorch中图像的数据格式实例
2020/02/11 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
Linux文件系统类型
2012/09/16 面试题
硕士生工作推荐信
2014/03/07 职场文书
体育课课后反思
2014/04/24 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
国庆节标语大全
2014/10/08 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
调任通知
2015/04/21 职场文书
优质服务标语口号
2015/12/26 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android