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实现画板的代码
Sep 05 Javascript
javascript document.images实例
May 27 Javascript
js去除重复字符串两种实现方法
Jan 09 Javascript
jQuery+AJAX实现网页无刷新上传
Feb 22 Javascript
node.js读取文件到字符串的方法
Jun 29 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
windows下vue-cli导入bootstrap样式
Apr 25 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 Javascript
JS中的const命令你真懂它吗
Mar 08 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
深入了解php4(1)--回到未来
2006/10/09 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
护士个人自我鉴定
2014/03/24 职场文书
学习型党组织心得体会
2014/09/12 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
2014年教研员工作总结
2014/12/23 职场文书
作文评语集锦
2014/12/25 职场文书
写给女朋友的保证书
2015/05/09 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
Go语言空白表示符_的实例用法
2021/07/04 Golang
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技