window.setTimeout和window.setInterval不能延时调用

本文探讨了JavaScript中window.setTimeout及window.setInterval的正确参数传递方法,尤其关注如何有效传递函数参数,避免常见错误,并提供了实用的解决方案。

无论是window.setTimeout 还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,

而在许多场合必需要带参数,如果企图使用以下语句来使hello函数延迟3 秒执行是不可行的:

window.setTimeout(hello(123),3000);
这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout 函数,其结果并不是程序需要的。

而使用字符串形式可以达到想要的结果:
window.setTimeout("hello(123)",3000);
归之 就是函数要以字符串形式传进去


另外我们常常会遇到一种情况,setTimeout(code,millisec)中code包含形参。


例如:我们需要在1秒后向用户提示的信息存储于变量msg中,varmsg='1shaspassed!';

此时不论是直接执行
setTimeout(alert(msg),1000);     //alert(msg)会被立即执行
还是
setTimeout(“alert(msg)”,1000);  //系统报错msgisnotdefined(chrome)

都不能达到预期的目的,因为定时器会努力地将code转化为一个function对象,

第一个错例里定时器立即执行code希求返回一个function对象,结果扑了空;

第二个虽然成功封装出function对象,但是定时器在msg的可见域外执行code,所以msg得不到正确的传递

推荐的解决办法是使用匿名函数回调
varmsg='1shaspassed!';
setTimeout( function(){ alert(msg); },1000);
第一个参数传递了一个会调用所需语句的function对象,这样就解决了code带参的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值