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 escape,unescape解决中文乱码问题的方法
May 26 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
Aug 23 Javascript
AngularJS基础知识
Dec 21 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
Mar 25 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
Sep 18 Javascript
谈一谈js中的执行环境及作用域
Mar 30 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
node内置调试方法总结
Feb 22 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
使用js实现一个简单的滚动条过程解析
Sep 10 Javascript
three.js 如何制作魔方
Jul 31 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中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
详解python中的index函数用法
2019/08/06 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
python else语句在循环中的运用详解
2020/07/06 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
建筑总经理岗位职责
2014/02/02 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技