setTimeout |
setInterval |
||
---|---|---|---|
描述 | 实现的是根据给定的时间间隔,每隔一段时间调用一次函数或执行一次代码 | 实现的是根据给定的时间,在经过该时间之后只调用一次函数或执行一次代码 | |
语法 | setTimeout (callback, delay, arg1, ..., argn) |
setInterval (callback, interval, arg1, ..., argn) |
|
参数 | callback |
必需。要调用的函数或要执行的代码串。(若是函数,则只需要写函数名,可以不加双引号和括号) | |
delay / interval
|
必需。在执行代码前需等待的毫秒数。 | ||
arg1, ..., argn |
可选。给回调函数的传参。 | ||
返回值 | 返回整型定时器id ,也就是这个setTimeout /setInterval 的唯一标示符。 |
||
取消定时器 | 利用 clearTimeout(id) 取消 |
||
运行机制 | |||
性能 | 性能较优 | ||
稳定性 | 更稳定 |
var interval = 3 * 1000,
count = 0;
function someOpration(){
var startTime = new Date();
console.log(startTime.toLocaleString() + " " + startTime.getMilliseconds());
var sum = 0;
for(let i=0; i < 2000000000; i++){
sum += i;
}
var endTime = new Date();
console.log(endTime.toLocaleString() + " " + endTime.getMilliseconds());
var duration = endTime - startTime;
console.log(duration);
}
setTimeout 链式调用
function slow1(){
if(count < 5){
someOpration();
count = count + 1;
setTimeout(slow1, interval);
}
}
setTimeout(slow1, interval);
setInterval 实现
var interval = 3 * 1000,
count = 0;
function slow2(){
if(count < 5){
someOpration();
count = count + 1;
} else {
clearTimeout(timerId);
}
}
var timerId = setInterval(slow2, interval)
setTimeout作用域相关经典面试题
for (var i = 1; i <= 2; i++) {
setTimeout(function() { alert(i) }, 100);
}
// 3
// 3
为每个定时器处理函数创建不同的“i”变量副本。比如这样
for (var i = 1; i <= 2; ++i){
doSetTimeout(i);
}
function doSetTimeout(i) {
setTimeout(function() { alert(i); }, 100);
}
可简写为
for (var i = 1; i <= 2; i++) {
setTimeout(function(j) { console.log(j) }, 100, i);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。