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 学习笔记(四)
Dec 31 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
JavaScript基础教程之alert弹出提示框实例
Oct 16 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
ztree获取当前选中节点子节点id集合的方法
Feb 12 Javascript
JS组件系列之JS组件封装过程详解
Apr 28 Javascript
基于Vue的商品主图放大镜方案详解
Sep 19 Javascript
js实现无缝轮播图
Mar 09 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
深入了解Vue3模板编译原理
Nov 19 Vue.js
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 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
文字幻灯片
2006/06/26 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
麦当劳辞职信范文
2014/01/18 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
党员干部承诺书
2014/03/25 职场文书
新农村建设典型材料
2014/05/31 职场文书
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python