JSFiddle - React, Tailwind, and code Playground

JavaScript

function invokeNow(callback) {
       // nothing asynchronous going on here.
       // the callback is invoked right now and the result is returned.
       return callback()
    }
    alert(invokeNow(function () { return "Hello world!" }))
    
    function doLater(callback) {
        // setup an asynchronous event
        setTimeout(callback, 1000)
        return "It isn't 'later' yet!"
    }
    
    alert(doLater(function () {
        alert("Later!")
        // note that this is running in the callback from the previous
        // timer event. if this code was below the outer alert then
        // it wouldn't have allowed the first timer callback to have occurred
        // until the blocking while was complete
        alert(doLater(function () { alert("I still ran!") }))
        var end = (+new Date) + 4000
        while ((+new Date) < end) { /* wait */ }
        alert("I am done waiting")
    }))