Нужна ли здесь return?

Написал код, который каждые 2 секунды вставляет html элемент поверх предыдущего.

Затем спрашивает остановить ли цикл.

Чувствую, что здесь в коде не хватает return, но где именно нужно разместить return?

let timer = setTimeout(function fun(){
main.innerHTML += main.innerHTML;
timer = setTimeout(fun, 2000);

let a = confirm('Остановить цикл?');
if(a == true){
clearTimeout(timer);    
alert('Цикл остановлен');   
} 
},1000)
#main{
background: orange; 
}

#home {
font-size: 2vmax;   
margin-left: 50%;
}
<div id="main">
<div id="home">
Опа
</div>
</div>


Ответы (2 шт):

Автор решения: Listopad02

Return нужно поставить перед вызовом alert, а верхнее содержимое функции надо перенести вниз. JS:

let timer = setTimeout(function fun(){
  let a = confirm('Остановить цикл?');
  if(a === true){
    clearTimeout(timer);    
    return alert('Цикл остановлен');   
  } 
  main.innerHTML += main.innerHTML;
  timer = setTimeout(fun, 2000);
},1000)

CSS:

#main{
background: orange; 
}

#home {
font-size: 2vmax;   
margin-left: 50%;
}

HTML:

<div id="main">
<div id="home">
Опа
</div>
</div>
→ Ссылка
Автор решения: Алексей Шиманский

Вначале печать, потом вопрос (обратите внимание, тут setInterval, а не setTimeout)

let i = 0;

let timer = setInterval(function fun() {
  main.innerHTML = i++;
 
  let a = confirm('Остановить цикл?');
  
  if (a == true) {
    clearTimeout(timer);
    alert('Цикл остановлен');
  }
}, 1000)
#main {
  background: orange;
}

#home {
  font-size: 2vmax;
  margin-left: 50%;
}
<div id="main">
  <div id="home">
    Опа
  </div>
</div>

Вначале вопрос, потом печать:

let i = 0;

let timer = setInterval(function fun() {  
  let a = confirm('Остановить цикл?');
  
  if (a == true) {
    clearTimeout(timer);
    alert('Цикл остановлен');
  } else {
     main.innerHTML = i++;
  }  
}, 1000)
#main {
  background: orange;
}

#home {
  font-size: 2vmax;
  margin-left: 50%;
}
<div id="main">
  <div id="home">
    Опа
  </div>
</div>


Никаких return нету ¯\_(ツ)_/¯

→ Ссылка