Explain Codes LogoExplain Codes Logo

Execute script after specific delay using JavaScript

javascript
async-programming
event-loop
ui-responsiveness
Alex KataevbyAlex Kataev·Feb 6, 2025
TLDR

Harness the power of setTimeout to delay execution of JavaScript code, by passing a callback function and delay in milliseconds.

setTimeout(() => console.log('Hold on, executing after delay...'), 3000);

The 3000 translates to a 3-second delay. Tweak to suit your requirements. Keep in mind, setTimeout won't halt the rest of your script—it plays alongside.

I. Gearing up to use setTimeout

1.1 The basics: setting up delay

At the heart of setTimeout sit the callback function and delay: the function to run after the delay, and the delay length.

let theMoment = 'It has a mind of its own'; setTimeout(() => {console.log(theMoment);}, 2000); // theMoment sticks around

1.2 The 'a'sync mind of setTimeout

Coding with setTimeout requires understanding of its asynchronous nature: your script keeps running even as the setTimeout waits. Such continuity means changes may affect variables within the setTimeout callback.

1.3 Slip-ups waiting to happen

The allure of creating timed delays via a while loop or Date objects is a trap — a UI freeze trap. In the single-threaded realm of JavaScript, blocking operations like these halt page responsiveness, resulting in an agonizing user experience.

1.4 The dread of memory leaks

In loops, or when a setTimeout nests within another setTimeout or setInterval, those much-feared memory leaks lurk, awaiting their chance. Unintentional closures or failure to clear timeouts can lead to excessive memory usage.

II. Mastering delay with setTimeout

2.1 Set customized delays

Crafting unique delay functions allows for a dynamic application of delays. Handy closures can serve this purpose:

function createDelayFunction(delay) { return function(callback) { setTimeout(callback, delay); }; } const delayTwoSecs = createDelayFunction(2000); // Just because we can! delayTwoSecs(() => console.log('Delayed for 2 seconds'));

2.2 Thrive amid variances

Not all delays are precise. Good ol' setTimeout has its rendezvous with JavaScript's event loop, potentially causing slight imprecision. It's crucial to anticipate these timing variations.

2.3 Application beyond the clock

Your awaiting guardian setTimeout can help deal with complex tasks, manage sequential animations, or even throttle event handling, all while preserving that precious UI responsiveness.

III. setTimeout, the pragmatic choice

3.1 Guiding script execution

As scripts grow heavy and complex, shepherding their order of operation is key. Use setTimeout to sequence tasks or schedule operations where timing is sequenced rather than simultaneous.

3.2 Interplay of event loop and rendering

Adept use of setTimeout warrants an understanding of the event loop. By delaying tasks, you afford the browser time to render DOM updates or process other queued events, optimizing responsiveness.

3.3 Ace non-blocking delays

In the world of user experience superiority, non-blocking delays are the norm. Leverage setTimeout to defer heavy tasks and bolster the page's responsiveness.