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使用手册之一
Mar 24 Javascript
浅谈Javascript中匀速运动的停止条件
Dec 19 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
Dec 14 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
Vue插件从封装到发布的完整步骤记录
Feb 28 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
vue中动态select的使用方法示例
Oct 28 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
Dec 15 Javascript
微信小程序实现弹框效果
May 26 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生成唯一数字id的方法汇总
2015/11/18 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
php设计模式之委托模式
2016/02/13 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php微信开发之关注事件
2018/06/14 PHP
js 分栏效果实现代码
2009/08/29 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
解析Python编程中的包结构
2015/10/25 Python
有趣的python小程序分享
2017/12/05 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python游戏地图最短路径求解
2019/01/16 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python实现上下文管理器的方法
2020/08/07 Python
用python批量移动文件
2021/01/14 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
党校学习党性分析材料
2014/12/19 职场文书
中考学习决心书
2015/02/04 职场文书
刘公岛导游词
2015/02/05 职场文书
涨价通知怎么写
2015/04/23 职场文书
正规欠条模板
2015/07/03 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android