无论是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带参的问题。
本文探讨了JavaScript中window.setTimeout及window.setInterval的正确参数传递方法,尤其关注如何有效传递函数参数,避免常见错误,并提供了实用的解决方案。
1020

被折叠的 条评论
为什么被折叠?



