Traté de resolver el problema, pero este código se registra dos veces. Registra a John antes del retraso y a "Robert" después del retraso.
let myName = 'John'; delayer(); myName = 'Robert'; function delayer() { console.log(myName); setTimeout(() => console.log(myName), 1500) }() => console.log(myName) es lo mismo que function() { return console.log(myName); } . [1]
La referencia de la función resultante se pasa a setTimeout que se encarga de llamarla después del retraso especificado. setTimeout no espera a que ocurra el retraso antes de regresar. Vuelve inmediatamente. Entonces myName se cambió cuando se llamó a la función anónima.