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 相关文章推荐
Javascript 中的类和闭包
Jan 08 Javascript
Jquery:ajax实现翻页无刷新功能代码
Aug 05 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
浅析JavaScript中的类型和对象
Nov 29 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
Jul 27 Javascript
angular2 ng build部署后base文件路径问题详细解答
Jul 15 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
Aug 16 Javascript
使用javascript做在线算法编程
May 25 Javascript
Vue分页插件的前后端配置与使用
Oct 09 Javascript
JS前端轻量fabric.js系列之画布初始化
Aug 05 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循环输出数据库内容的代码
2008/05/24 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python 字典(dict)按键和值排序
2016/06/28 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
python pyheatmap包绘制热力图
2018/11/09 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
高中校园广播稿
2014/01/11 职场文书
男方父母证婚词
2014/01/12 职场文书
质量标语大全
2014/06/12 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
财务管理专业自荐书
2014/09/02 职场文书
就业导师推荐信范文
2015/03/27 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
办公用品管理制度
2015/08/04 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS