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入门教程(1) 什么是JS
Jan 31 Javascript
javascript设计模式 封装和信息隐藏(上)
Jul 24 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
Sep 14 Javascript
读取input:file的路径并显示本地图片的方法
Sep 23 Javascript
JavaScript执行顺序详细介绍
Dec 04 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
jquery简单实现网页层的展开与收缩效果
Aug 07 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
tracking.js页面人脸识别插件使用方法
Apr 16 Javascript
vue组件之间通信方式实例总结【8种方式】
Feb 22 Javascript
layUI实现列表查询功能
Jul 27 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
php图片缩放实现方法
2014/02/20 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
商务专员岗位职责
2013/11/23 职场文书
中学生自我评价范文
2014/02/08 职场文书