How does JavaScript closures work?