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操作userdata
Apr 27 Javascript
语义化 H1 标签
Jan 14 Javascript
Jquery 弹出层插件实现代码
Oct 24 Javascript
javascript Demo模态窗口
Dec 06 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
Oct 12 Javascript
在网站上应该用的30个jQuery插件整理
Nov 03 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 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中检查文件或目录是否存在的代码小结
2012/10/22 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
简单的php购物车代码
2020/06/05 PHP
js 操作符实例代码
2009/10/24 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
es6数值的扩展方法
2019/03/11 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
python实现代理服务功能实例
2013/11/15 Python
Python中for循环详解
2014/01/17 Python
人机交互程序 python实现人机对话
2017/11/14 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
python使用KNN算法手写体识别
2018/02/01 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
Python学习之os模块及用法
2020/06/03 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
服装设计专业毕业生求职信
2014/04/09 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
英文商务邀请函范文
2015/01/31 职场文书
如何做好工作总结!
2019/04/10 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android