从setInterval
和返回的值setTimeout
是数字,因此只有一个“适合”变量。
你可以做一个数组:
var intervalId = [];
for(var i = 0; i < 10; i++) {
intervalId.push( setInterval(function() { ... }, 100) );
}
请注意,您的问题中缺少一些重要的东西,那就是区间函数中的代码。具体来说,如果该代码想要引用“i”,就会出现问题:所有单独的函数将共享相同的“i”变量(在循环头中声明的那个)。
为了解决这个问题,你可以这样做:
function makeTimerFunction(i) {
return function() {
// the code
if (whatever) { clearInterval(intervalId[i]); }
// and so on
};
}
var intervalId = [];
for (var i = 0; i < 10; i++)
intervalId.push( setInterval( makeTimerFunction(i), 100 ) );
通过使用单独的函数,您可以创建另一个范围,并且可以将“i”的每个值“冻结”在单独的每个计时器变量中。
编辑——@pst 正确指出,如果你确实想从处理函数内部引用计时器 id ,那么根本不需要那个“intervalId”数组——你可以只使用包装器函数来隔离对setInterval()
.
function createTimer() {
var timerId = setInterval(function() {
// the code
if (whatever) { clearInterval( timerId ); }
// ...
};
}
for (var i = 0; i < 10; ++i)
createTimer();
这样,每个计时器都设置了它自己的私有计时器 ID 变量。当然,如果您确实需要函数之外的计时器 id,那么您需要一个用于 id 的外部缓存。