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,jquery闭包概念分析
Jun 19 Javascript
javascript实现随机读取数组的方法
Aug 03 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
Aug 12 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
js实现自定义路由
Feb 04 Javascript
jQuery实现页面倒计时并刷新效果
Mar 13 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
JavaScript实现随机点名程序
Mar 25 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
JavaScript运动减速效果实例分析
2015/08/04 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
详解Vue 如何监听Array的变化
2019/06/06 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
python脚本实现验证码识别
2018/06/07 Python
python如何生成各种随机分布图
2018/08/27 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python实现图像全景拼接
2020/03/27 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
小学红领巾中秋节广播稿
2014/01/13 职场文书
岗位职责风险防控
2014/02/18 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
新农村建设典型材料
2014/05/31 职场文书
中秋晚会活动方案
2014/08/31 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫