Javascript 定时器调用传递参数的方法


Posted in Javascript onNovember 12, 2009

无论是window.setTimeout 还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必需要带参数,这就需要想方法解决.
例如对于函数hello(_name),它用于针对用户名显示欢迎信息:

var userName="Tony"; 
//根据用户名显示欢迎信息 
function hello(_name){ 
alert("hello,"+_name); 
}

这时,如果企图使用以下语句来使hello函数延迟3 秒执行是不可行的:
window.setTimeout(hello(userName),3000);
这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout 函数,其结果并不是程序需要的.而使用字符串形式可以达到想要的结果:
window.setTimeout("hello(userName)",3000);
这里的字符串是一段JavaScript 代码,其中的userName 表示的是变量.但这种写法不够直观,而且有些场合必须使用函数名,下面用一个小技巧来实现带参数函数的调用:
<script language="JavaScript" type="text/javascript"> 
<!-- 
var userName="jack"; 
//根据用户名显示欢迎信息 
function hello(_name){ 
alert("hello,"+_name); 
} 
//创建一个函数,用于返回一个无参数函数 
function _hello(_name){ 
return function(){ 
hello(_name); 
} 
} 
window.setTimeout(_hello(userName),3000); 
//此处也可以写为window.setTimeout( function(){return hello(userName)}, 3000); 
//就不用再定义function _hello() 
//--> 
</script>

这里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数.在window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能.
Javascript 相关文章推荐
js异或加解密效果代码
Jun 25 Javascript
JQuery 网站换肤功能实现代码
Nov 02 Javascript
理解jQuery stop()方法
Nov 21 Javascript
AngularJS+Node.js实现在线聊天室
Aug 28 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
Apr 18 Javascript
最全面的JS倒计时代码
Sep 17 Javascript
原生JS实现匀速图片轮播动画
Oct 18 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
vue $set 给数据赋值的实例
Nov 09 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
Jul 17 Javascript
JavaScript流程控制(分支)
Dec 06 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
Nov 12 #Javascript
JS解析XML的实现代码
Nov 12 #Javascript
跨域表单提交状态的变相判断代码
Nov 12 #Javascript
JS 中document.URL 和 windows.location.href 的区别
Nov 11 #Javascript
ASP中进行HTML数据及JS数据编码函数
Nov 11 #Javascript
javascript 日期常用的方法
Nov 11 #Javascript
Jquery在IE7下无法使用 $.ajax解决方法
Nov 11 #Javascript
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
利用js对象弹出一个层
2008/03/26 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
JQuery常见节点操作实例分析
2019/05/15 jQuery
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python获取服务器响应cookie的实例
2018/12/28 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
医药代表个人求职信范本
2013/12/19 职场文书
集体婚礼证婚词
2014/01/13 职场文书
社区国庆节活动方案
2014/02/05 职场文书
心理咨询承诺书
2014/05/20 职场文书
学校党员对照检查材料
2014/08/28 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
优秀团员个人总结
2015/02/26 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
DIY胆机必读:各国电子管评价
2022/04/06 无线电