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 相关文章推荐
Jquery节点遍历next与nextAll方法使用示例
Jul 22 Javascript
javascript获取wx.config内部字段解决微信分享
Mar 09 Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
Jun 04 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
vue实现循环切换动画
Oct 17 Javascript
vue中轮训器的使用
Jan 27 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 Javascript
Echarts实现单条折线可拖拽效果
Dec 19 Javascript
js实现踩五彩块游戏
Feb 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
mysql5详细安装教程
2007/01/15 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
解析php中const与define的应用区别
2013/06/18 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
简单了解python协程的相关知识
2019/08/31 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
详解python中各种文件打开模式
2020/01/19 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
建筑安全标语
2014/06/07 职场文书
2015年招聘工作总结
2014/12/12 职场文书
党员公开承诺书2016
2016/03/24 职场文书
golang中的并发和并行
2021/05/08 Golang
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android