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 相关文章推荐
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
Feb 15 Javascript
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
JS实现的自定义水平滚动字体插件完整实例
Jun 17 Javascript
jquery+css实现侧边导航栏效果
Jun 12 jQuery
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
微信小程序实现下拉菜单切换效果
Mar 30 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 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汉字转拼音的示例
2014/02/27 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
php函数连续调用实例分析
2015/07/30 PHP
php session 写入数据库
2016/02/13 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
浅谈js原生拖放
2016/11/21 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
Django组件content-type使用方法详解
2019/07/19 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
Python autoescape标签用法解析
2020/01/17 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
中班上学期个人总结
2015/02/12 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS