关于定时器调用有参函数的问题

对于一个已经定义好的函数,如:

function sayhello(myname){
     alert("hello"+myname);  
}
setInterval(sayhello,300);

此时由于无法传递参数而只能输出hello

而对于另一种写法:

function sayhello(myname){
     alert("hello"+myname);  
}
setInterval(sayhello(Name),300);

此时会发生一种现象就是,window直接调用sayhello函数,并且传入参数;

显然这种方法不靠谱,因此对于这个问题其中一个比较常用的解决方法就是:

function timer(myname){
    function sayhello(myname){
     alert("hello"+myname);  
}
   return sayhello;
}
setInterval(sayhello(Name),300);

也就是说,我们可以把需要调用的函数嵌入到另一个函数中,然后把函数自身作为返回值(注意返回值不加括号)返回到新的函数中,

在通过定时器传参给新函数,再通过新函数传参给需要点用的函数。

 

其实主要原因还是在上一篇的随笔中提到的的一个函数加不加括号的问题,加了括号返回的就是整个函数体,所以会立即执行该函数,

不加括号就是调用函数名,函数名就相当于一个指向函数的指针,而不是函数本身。

posted @ 2017-04-25 21:52  change_Y  阅读(1557)  评论(0编辑  收藏  举报