64 lines
1 KiB
Markdown
64 lines
1 KiB
Markdown
|
|
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);
|
|
```
|