我们知道setInterval(callback, delay, [arg], [...])可以定时循环执行指定的函数(callback),并可以传递参数给callback函数。它返回一个intervalId
,用于调用clearInterval(intervalId)以终止此定时循环触发。
使用setTimeout(callback, delay, [arg], [...])进行在设定的时间间隔后执行指定函数。参数类似于setInterval函数。同样返回一个timeoutId,用于调用clearTimeout(timeoutId)已中途终止以阻止本此触发。
因此,我们可以利用setTimeout这一特点,实现不定时执行某一操作的功能。
示例代码如下:
var cruiseNodes = [1,2,1,3];
var cruiseNO = 0;
startPlayCruise();
function startPlayCruise() {
if (cruiseNO >= cruiseNodes.length) return;
cruiseDelay = parseFloat(cruiseNodes[cruiseNO])*1000;
alert(cruiseDelay);
cruiseNO++;
setTimeout(startPlayCruise, cruiseDelay);
}
传递参数给callback函数的setTimeout函数调用的写法为:
setTimeout(myFunction, myTimeout, parameter);
或者更容易理解的方式是使用闭包:
setTimeout(function(){myFunction(parameter)}, myTimeout);
示例代码如下:
var cruiseNodes = [1,2,1,3];
var cruiseNO = 0;
startPlayCruise(cruiseNO);
function startPlayCruise(number) {
if (cruiseNO >= cruiseNodes.length) return;
cruiseDelay = parseFloat(cruiseNodes[cruiseNO])*1000;
// 将序号作为setTimeout函数用于startPlayCruise函数的输入参数,并在此显示
alert(number);
cruiseNO++;
setTimeout(startPlayCruise,cruiseDelay,cruiseNO);
// 或者使用闭包,如下所示:
// setTimeout(function()(startPlayCruise(cruiseNO)),cruiseDelay);
}
参考自:Guide to JavaScript Timers with setTimeout() and setInterval() http://www.itnewb.com/tutorial/Guide-to-JavaScript-Timers-with-setTimeout-and-setInterval
Timers http://nodejs.org/api/timers.html
Passing parameters to a function called with setTimeout http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout