https://medium.com/@anandoganiya/in-javascript-a-closure-is-a-function-that-has-access-to-the-variables-in-its-parent-scope-even-2246dd5792fb