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与asp.net(c#)互相调用方法
Dec 13 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
js实现动态加载脚本的方法实例汇总
Nov 02 Javascript
Node.js的Express框架使用上手指南
Mar 12 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
Sep 05 Javascript
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
八种Vue组件间通讯方式合集(推荐)
Aug 18 Javascript
js前端设计模式优化50%表单校验代码示例
Jun 21 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
zf框架的registry(注册表)使用示例
2014/03/13 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
Python使用functools实现注解同步方法
2018/02/06 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
tensorflow 环境变量设置方式
2020/02/06 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Golang实现AES对称加密的过程详解
2021/05/20 Golang
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
进行数据处理的6个 Python 代码块分享
2022/04/06 Python