https://mysteryweevil.medium.com/understanding-closures-in-javascript-a-fundamental-concept-simplified-e21cef98df96