I tried to figure out the problem but this code logs twice. It logs John before the delay and "Robert" after the delay.
let myName = 'John';
delayer();
myName = 'Robert';
function delayer() {
console.log(myName);
setTimeout(() => console.log(myName), 1500)
}
() => console.log(myName) is the same as function() { return console.log(myName); }.[1]
The resulting function reference is passed to setTimeout which arranges to call it after the specified delay. setTimeout doesn't wait for the delay to occur before returning. It returns immediately. So myName has been changed by the time the anonymous function has been called.