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 数组与字典
Jan 29 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
Jun 04 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
javascript 秒表计时器实现代码
Mar 09 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
使用Vuex实现一个笔记应用的方法
Mar 13 Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
微信小程序使用echarts获取数据并生成折线图
Oct 16 Javascript
JavaScript Tab菜单实现过程解析
May 13 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
php实现微信企业转账功能
2018/10/02 PHP
php依赖注入知识点详解
2019/09/23 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
挂科检讨书范文
2014/02/20 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
高一军训感想
2015/08/07 职场文书
学生会主席任命书
2015/09/21 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS