All global variables and functions become properties and methods of the window object. Try
console.log(window) to see what global scope looks like. If you have custom functions and variables, they will appear as properties attached to the
Wrapping everything in a function makes your "global" variables and functions less global: they become part of the wrapping function's scope. They will not be attached to the
window object, but will rather only exist while the wrapping function is running. As soon as the function ends, all its internal variables and functions are purged from memory.
This is good because it provides better memory control, but more importantly it protects your code from being accidentally overwritten by other global variables or functions that just happen to have the exact same name. If you're working with several different modules, or if there are a team of developers, then it makes a lot of sense to keep code groups separate and unable to damage any other.