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

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

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);

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

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

 

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

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

转载于:https://www.cnblogs.com/change32514/p/6764782.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值