https://mysteryweevil.medium.com/understanding-immediately-invoked-function-expressions-iife-in-javascript-11d5ddba5e4d