torna alle lezioni

Output ogni secondo

importanza: 5

Scrivi una funzione stampaNumeri(da, a) che produca un numero ogni secondo, partendo da da e finendo con a.

Crea due varianti della soluzione.

  1. Usando setInterval.
  2. Usando setTimeout ricorsivo.

Usando setInterval:

function stampaNumeri(da, a) {
  let attuale = da;

  let timerId = setInterval(function() {
    alert(attuale);
    if (attuale == a) {
      clearInterval(timerId);
    }
    attuale++;
  }, 1000);
}

// utilizzo:
stampaNumeri(5, 10);

Usando setTimeout ricorsivo:

function stampaNumeri(da, a) {
  let attuale = da;

  setTimeout(function vai() {
    alert(attuale);
    if (attuale < a) {
      setTimeout(vai, 1000);
    }
    attuale++;
  }, 1000);
}

// utilizzo:
stampaNumeri(5, 10);

Nota che in entrambe le soluzioni c’è un ritardo iniziale prima del primo output. La funzione viene eseguita la prima volta dopo 1000ms.

Se vogliamo che la funzione venga eseguita subito, possiamo aggiugere una chiamata addizionale su di una linea separata, come questa:

function stampaNumeri(da, a) {
  let attuale = da;

  function vai() {
    alert(attule);
    if (attuale == a) {
      clearInterval(timerId);
    }
    attuale++;
  }

  vai();
  let timerId = setInterval(vai, 1000);
}

stampaNumeri(5, 10);