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)
for (var i = 1; i <= 2; i++) { setTimeout(function() { alert(i) }, 100); } // 3 // 3
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); }