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中SQL语句的应用实现
May 04 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
Apr 01 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
Nov 22 Javascript
javascript白色简洁计算器
May 04 Javascript
Javascript刷新窗口方法小结
Oct 21 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
深入理解Vue.js源码之事件机制
Sep 27 Javascript
vue select组件的使用与禁用实现代码
Apr 10 Javascript
vue渲染方式render和template的区别
Jun 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
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
python对url格式解析的方法
2015/05/13 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
UNIX文件类型
2013/08/29 面试题
学生个人自我鉴定范文
2014/03/28 职场文书
企业宗旨标语
2014/06/10 职场文书
自我管理的活动方案
2014/08/25 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers