无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在 
许多场合必须要带参数,这就需要想方法解决。例如对于函数hello(_name),它用于针对用户名显示欢 
迎信息:

var userName="jack";

//根据用户名显示欢迎信息 
   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); 
//--> 
</script> 
此技巧,不管是全局变量,还是局部变量都可以传递 
这里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了 
外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_hello 
(userName)来返回一个不带参数的11:01 2007-1-5函数句柄,从而实现了参数传递的功能。

来自:http://www.cnblogs.com/chinahnzl/articles/612147.html

给定时器settimeout、setInterval调用传递参数的更多相关文章

  1. 定时器(setTimeout/setInterval)调用带参函数失效解决方法

    也许你曾碰到过这样的问题,不管是setInterval()还是setTimeout(),当code参数里放一个带参函数时,定时器都会失效,看下面这个例子: function test(str){ al ...

  2. js给定时器调用传递参数

    给定时器调用传递参数 无论是window.setTimeout 还是window.setInterval,在使用函数名作为调用句柄时都不 能带参数,而在许多场合必需要带参数,这就需要想方法解决.例如对 ...

  3. Javascript 定时器调用传递参数的方法

    文章来源:  https://m.jb51.net/article/20880.htm 备注:先记下,以后整理: Javascript 定时器调用传递参数的方法,需要的朋友可以参考下. 无论是wind ...

  4. 定时器 setTimeout()超时调用和 setInterval()间歇调用

    JavaScript是单线程语言,但它允许通过设置定时器,也就是设置超时值和间歇时间来调度代码在特定的时刻执行.前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码. 超时调用需要使 ...

  5. 【知识】定时器setTimeout/setInterval执行时this指针指向问题

    [问题描述] setTimetout/setInterval中this指针指向window,以下是一个小demo: var demoChange = { key: true, changeFun() ...

  6. 清除定时器 和 vue 中遇到的定时器setTimeout & setInterval问题

    2019-03更新 找到了更简单的方法,以setinterval为例,各位自行参考 mounted() { const that = this const timer = setInterval(fu ...

  7. Juqery 定时器 settimeout setInterval

    setTimeout 只执行一次 setTimeout(loading_tree,2000); function loading_tree(){ $('body').mLoading("hi ...

  8. 使用匿名函数给setInterval()传递参数

    在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的.这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来 ...

  9. 使用定时器settimeout、setInterval执行能传递参数的函数

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.经网上查询后整理如下: 例如对于 ...

随机推荐

  1. POST流方式接受数据方法

    /** * 流方式接收数据 * @param $url * @param $jsonFile * @return bool */private static function sendStreamJs ...

  2. 研究Mysql优化得出一些建设性的方案

    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 熟悉网络请求路径,网址经过浏览器的URL验证,是否正确证书是否 ...

  3. LINUX端口查看

    e切依燃   LINUX端口查看 查看文件数 ls | wc -w lsof -i:80

  4. HTTP压缩

    HTTP的压缩过程如下: 1.浏览器发送HTTP Request给Web服务器,Request中含有Accept-Encoding:gzip,deflate(告诉服务器支持的压缩格式): 2.Web服 ...

  5. wordpress multisite functions

    The <?php echo esc_html( get_site_option( 'site_name' ) ); ?> network currently powers <?ph ...

  6. linux io stack

  7. margin属性

    可以设置position:absolute/relative/fixed,通过调节top/bottom/left/right实现元素的定位,这样很好,但是有时候想通过margin来实现. 下面是mar ...

  8. __attribute__

    转来的: http://www.cnblogs.com/astwish/p/3460618.html __attribute__ 你知多少? GNU C 的一大特色就是__attribute__ 机制 ...

  9. linux/unix 编程手册 fork()函数

    父进程通过fork()函数创建子进程,将父进程数据段和栈的内容拷贝到子进程中,子进程执行程序execve创建新程序,调用exit函数退出到等待wait(),挂起父进程, 父子进程享用相同的程序文本段. ...

  10. web前端基础知识jQuery-补

    一.JS正则 1.定义正则表达式 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串: 1)构造函数 var reg=new RegExp('< ...