备注: 先记下, 以后整理:
JavaScript 定时器调用传递参数的方法, 需要的朋友可以参考下.
无论是 Windows.setTimeout 还是 Windows.setInterval, 在使用函数名作为调用句柄时都不能带参数, 而在许多场合必需要带参数, 这就需要想方法解决.
例如对于函数 hello(_name), 它用于针对用户名显示欢迎信息:
代码如下:
- var userName="Tony";
- // 根据用户名显示欢迎信息
- function hello(_name){
- alert("hello,"+_name);
- }
这时, 如果企图使用以下语句来使 hello 函数延迟 3 秒执行是不可行的:
Windows.setTimeout(hello(userName),3000);
这将使 hello 函数立即执行, 并将返回值作为调用句柄传递给 setTimeout 函数, 其结果并不是程序需要的. 而使用字符串形式可以达到想要的结果:
Windows.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() { // 前端全栈交流学习圈: 866109386
- hello(_name); // 面相 1-3 年经验前端开发人员
- } // 帮助突破技术瓶颈, 提升思维能力
- }
- window.setTimeout(_hello(userName), 3000);
- // 此处也可以写为 window.setTimeout( function(){return hello(userName)}, 3000);
- // 就不用再定义 function _hello()
- //-->
- </script>
这里定义了一个函数_hello, 用于接收一个参数, 并返回一个不带参数的函数, 在这个函数内部使用了外部函数的参数, 从而对其调用, 不需要使用参数. 在 Windows.setTimeout 函数中, 使用_hello(userName) 来返回一个不带参数的函数句柄, 从而实现了参数传递的功能.
来源: http://www.qdfuns.com/article/51070/187341601f81f1efdaac15c731a14c4d.html