¿Cómo agrego un retraso en un bucle de JavaScript?

Me gustaría agregar un retraso / dormir dentro de unwhile lazo:

Lo intenté así:

alert('hi');

for(var start = 1; start < 10; start++) {
  setTimeout(function () {
    alert('hello');
  }, 3000);
}

Solo el primer escenario es verdadero: después de mostraralert('hi'), esperará 3 segundos y luegoalert('hello') se mostrará pero luegoalert('hello') será repetidamente constantemente.

Lo que me gustaría es que despuésalert('hello') se muestra 3 segundos despuésalert('hi') entonces necesita esperar 3 segundos por segunda vezalert('hello') y así.

Respuestas a la pregunta(24)

Su respuesta a la pregunta