我认为最简单的方法是在函数中创建一些闭包。
首先,我会记得您对 using 非常感兴趣setInterval
,因为它的开销setTimeout
可能会触发 10ms 偏离目标。所以特别是如果使用短(<50ms)间隔,更喜欢setInterval。所以我们需要存储函数数组、最近执行函数的索引和一个间隔引用来停止调用。
function chainLaunch(funcArray, time_ms) {
if (!funcArray || !funcArray.length) return;
var fi = 0; // function index
var callFunction = function () {
funcArray[fi++]();
if (fi==funcArray.length)
clearInterval(chainInterval);
} ;
var chainInterval = setInterval( callFunction, time_ms);
}
Rq:您可能想要复制函数数组 ( funcArray = funcArray.slice(0);
)
Rq2:您可能想要在数组中循环
Rq3:您可能想要接受链启动的附加参数。检索它们var funcArgs = arguments.slice(3);
并在函数上使用 apply :funcArray[fi++].apply(this,funcArgs);
无论如何,以下测试有效:
var f1 = function() { console.log('1'); };
var f2 = function() { console.log('2'); };
var f3 = function() { console.log('3'); };
var fArr = [f1, f2, f3];
chainLaunch(fArr, 1000);
正如你在这个小提琴中看到的那样:http: //jsfiddle.net/F9UJv/1/
(打开控制台)