https://medium.com/@maxheadway/the-differences-between-a-function-declaration-and-a-function-expression-in-javascript-9031e63da406