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实现幻灯片效果(基于jquery插件)
Nov 05 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
javascript函数自动执行常用方法汇总
Mar 28 Javascript
jQuery实现内容定时切换效果完整实例
Apr 06 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
轻松解决JavaScript定时器越走越快的问题
May 13 Javascript
layui的layedit富文本赋值方法
Sep 18 Javascript
如何在Express4.x中愉快地使用async的方法
Nov 18 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查询网站的PR值
2013/10/30 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
Django的数据模型访问多对多键值的方法
2015/07/21 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
Python是什么 Python的用处
2020/05/26 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
final, finally, finalize的区别
2012/03/01 面试题
毕业自我鉴定书
2014/03/24 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
社会实践活动总结
2015/02/05 职场文书
Python基础知识之变量的详解
2021/04/14 Python
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS