function printNumbersInterval(){
var d = 1;
var s = setTimeout(function f(){
if (d > 20){
clearTimeout(s);
}
console.log(d++);
s = setTimeout(f, 100)
}, 100)
};
console.log( printNumbersInterval() );
Это связано с тем, что после очистки setTimeout, код идет выполняться ниже, а у вас там присваивание нового setTimeout.
Что бы этого избежать, у вас есть 2 выхода:
setTimeout ниже написать return, что бы функция прекратила свое выполнение на этом месте.if, else.Ниже в коде я оставил комментарии.
P.S: Stepan Kasyanenko в ответе правильно написал, что можно обойти и без очистки setTimeout.
function printNumbersInterval() {
var d = 1;
var s = setTimeout(function f() {
if (d > 20) {
clearTimeout(s);
return; //Все что ниже не будет выполнено.
}
console.log(d++);
s = setTimeout(f, 100)
}, 100)
};
//или сделать условия if, else
//if (d > 20) {
// clearTimeout(s);
//} else {
// console.log(d++);
// s = setTimeout(f, 100)
//}
console.log(printNumbersInterval());
Вам здесь clearTimeout не нужен. Просто не запускайте следующий setTimeout, если он не нужен.
function printNumbersInterval() {
var d = 1;
setTimeout(function f() {
if (d > 20) {
return; // выходим из функции, не запуская еще раз setTimeout
}
console.log(d++);
setTimeout(f, 100);
}, 100)
};
console.log(printNumbersInterval());
Продвижение своими сайтами как стратегия роста и независимости