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 相关文章推荐
基于jQuery的可以控制左右滚动及自动滚动效果的代码
Jul 25 Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
javascript中Math.random()使用详解
Apr 15 Javascript
javascript中setInterval的用法
Jul 19 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
Underscore源码分析
Dec 30 Javascript
Html5 js实现手风琴效果
Apr 17 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
AngularJS实现表格的增删改查(仅限前端)
Jul 04 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 Javascript
测量JavaScript函数的性能各种方式对比
Apr 27 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
解析php开发中的中文编码问题
2013/08/08 PHP
PHP队列用法实例
2014/11/05 PHP
PHP处理会话函数大总结
2015/08/05 PHP
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
使用graphics.py实现2048小游戏
2015/03/10 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
Python telnet登陆功能实现代码
2020/04/16 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
简历中自我评价范文3则
2013/12/14 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
英语简历自我评价
2014/01/26 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
学习十八大演讲稿
2014/09/15 职场文书
计划生育工作汇报
2014/10/28 职场文书
论群众路线学习笔记
2014/11/06 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书