https://blog.repithwin.com/understanding-the-javascript-window-object/