https://mysteryweevil.medium.com/understanding-javascript-closures-dynamic-scope-vs-lexical-scope-00a345e3395d