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());
Виртуальный выделенный сервер (VDS) становится отличным выбором
при нажатии кнопки необходимо создать ссылку c вводными параметрамиНапример:
всем привет , второй день не могу мануалы понять как мне суммирвоать массивы по значениям в них