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 相关文章推荐
DLL+ ActiveX控件+WEB页面调用例子
Aug 07 Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 Javascript
页面装载js及性能分析方法介绍
Mar 21 Javascript
通过url查找a元素并点击
Apr 09 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
Feb 12 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
微信小程序实现蒙版弹出窗功能
Sep 17 Javascript
Vuex实现数据增加和删除功能
Nov 11 Javascript
微信小程序自定义底部弹出框功能
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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
python实现一次创建多级目录的方法
2015/05/15 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python温度转换实例分析
2018/01/17 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python 调试冷知识(小结)
2019/11/11 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
Python中求对数方法总结
2020/03/10 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
nohup的用法
2014/08/10 面试题
专科毕业生求职简历的自我评价
2013/10/12 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
美术社团活动总结
2014/06/27 职场文书
出国签证在职证明范本
2014/11/24 职场文书
股份转让协议书范本
2015/01/27 职场文书
幼师小班个人总结
2015/02/12 职场文书
党员自我评价范文2015
2015/03/03 职场文书