javascript – 再次设置setTimeout vs setInterval

所以我知道setTimeout和setInterval之间存在差异,但请考虑以下两个代码示例:

function myFunction(){
   setTimeout('myFunction();', 100);
   doSomething();
}
setTimeout('myFunction();', 100);

function myFunction(){
   doSomething();
}
setInterval('myFunction();', 100);

请注意,在第一个示例中,我在函数的开头调用setTimeout然后我做了一些事情.因此doSomething()没有额外的延迟.这是否意味着这两个例子完全相同?还是有更微妙的区别?

解决方法:

它们在功能上大致相同,但存在差异.一个区别在于,如果doSomething需要比间隔更长的时间,浏览器将如何处理它.使用setInterval,如果doSomething仍在运行,至少某些浏览器将跳过下一个间隔.因此,如果您使用100毫秒,并且doSomething需要110毫秒才能运行,下一次运行将不会发生直到90毫秒(当然,所有这些时间都是近似值).

另一个区别是,使用setTimeout,每次都会获得一个新句柄,而使用setInterval则可以获得一个句柄.

给出的示例的另一个不同之处在于,在setTimeout示例中,您每次都会启动JavaScript解析器/编译器,而使用setInterval,您只需启动解析器/编译器一次.但这种差异并不重要,因为你根本不应该这样做 – 见下文.

但除了细微之处,你在那里拥有的功能是相同的.

旁注:将字符串传递给setTimeout或setInterval不是最佳做法.相反,传入一个函数引用:

// setTimeout
function myFunction(){
   setTimeout(myFunction, 100);
   doSomething();
}
setTimeout(myFunction, 100);

// setInterval
function myFunction(){
   doSomething();
}
setInterval(myFunction, 100);

传入一个字符串会激活一个JavaScript解析器并执行与eval相同的操作.应该尽可能避免(而且几乎总是可能的).

上一篇:javascript – jQuery:ajax函数的延迟间隔,直到上一次运行完成


下一篇:简单的Javascript或jQuery clearInterval问题