var num = 0;
var max = 10;
var intervalNumber = null;function incrementNumber() {
return function() {
num++;
alert("No");
setTimeout(arguments.callee, 500);
if (num == max) {
clearTimeout(intervalNumber);
alert("Done");
}
}
}var interval = incrementNumber();
intervalNumber = setTimeout(interval, 500);
为什么弹出了Done窗口后还继续弹出No?不是应该Done后就没有了吗?
var max = 10;
var intervalNumber = null;function incrementNumber() {
return function() {
num++;
alert("No");
s2=setTimeout(arguments.callee, 500);//你这个调用自身的定时器并没有清除掉
if (num == max) {
clearTimeout(s2);//清除它
clearTimeout(intervalNumber);
alert("Done");
}
}
}var interval = incrementNumber();
intervalNumber = setTimeout(interval, 500);
那为什么setInterval又可以呢?
var num = 0;
var max = 10;
var intervalNumber = null;function incrementNumber() {
return function() {
num++;
alert("No");
if (num == max) {
clearInterval(intervalNumber);
alert("Done");
}
}
}var interval = incrementNumber();
intervalNumber = setInterval(interval, 500);
var max = 10;
var intervalNumber = null;function incrementNumber() {
return function() {
num++;
alert("No");
//你之前将setTimeout(arguments.callee, 500);放在这里,不管下面的num==max条件成立与否,都已经执行了呀。你自己仔细想想就清楚了
if (num == max) {
alert("Done");
}else{
setTimeout(arguments.callee, 500);//你这个调用自身的定时器并没有清除掉
}
}
};
var interval = incrementNumber();
intervalNumber = setTimeout(interval, 500);
if (num == max) {
clearTimeout(intervalNumber); // 并没有清除前面的 setTimeout(arguments.callee, 500);清除的是 intervalNumber
alert("Done");
}