Using `setInterval`: ```js run function printNumbers(from, to) { let current = from; let timerId = setInterval(function() { alert(current); if (current == to) { clearInterval(timerId); } current++; }, 1000); } // usage: printNumbers(5, 10); ``` Using nested `setTimeout`: ```js run function printNumbers(from, to) { let current = from; setTimeout(function go() { alert(current); if (current < to) { setTimeout(go, 1000); } current++; }, 1000); } // usage: printNumbers(5, 10); ``` Note that in both solutions, there is an initial delay before the first output. The function is called after `1000ms` the first time. If we also want the function to run immediately, then we can add an additional call on a separate line, like this: ```js run function printNumbers(from, to) { let current = from; function go() { alert(current); if (current == to) { clearInterval(timerId); } current++; } *!* go(); */!* let timerId = setInterval(go, 1000); } printNumbers(5, 10); ```