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 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
JavaScript 的继承
Oct 01 Javascript
打印json对象的内容及JSON.stringify函数应用
Mar 29 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
巧用Javascript的逻辑运算符
Dec 02 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
vue父子组件通信的高级用法示例
Aug 29 Javascript
JavaScript获取当前url路径过程解析
Dec 27 Javascript
node.js使用yargs处理命令行参数操作示例
Feb 11 Javascript
JavaScript 接口原理与用法实例详解
May 12 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
php实现数据库的增删改查
2017/02/26 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
javascript操作css属性
2013/12/30 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
python画图的函数用法以及技巧
2019/06/28 Python
django2笔记之路由path语法的实现
2019/07/17 Python
pytorch梯度剪裁方式
2020/02/04 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
客服部班长工作责任制
2014/02/25 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
如何撰写创业策划书
2019/06/27 职场文书