fre*_*ish 3 javascript settimeout setinterval
所以我知道setTimeout和之间存在差异setInterval,但请考虑以下两个代码示例:
function myFunction(){
setTimeout('myFunction();', 100);
doSomething();
}
setTimeout('myFunction();', 100);
Run Code Online (Sandbox Code Playgroud)
和
function myFunction(){
doSomething();
}
setInterval('myFunction();', 100);
Run Code Online (Sandbox Code Playgroud)
需要注意的是在第一个例子中,我调用setTimeout在函数的开头,然后我doSomething.因此没有额外的延迟doSomething().这是否意味着这两个例子完全相同?还是有更微妙的区别?
T.J*_*der 11
它们在功能上大致相同,但存在差异.一个区别在于浏览器如果处理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);
Run Code Online (Sandbox Code Playgroud)
传入一个字符串会激活一个JavaScript解析器并执行相同的操作eval.应该尽可能避免(而且几乎总是可能的).
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |