JavaScript the Hard Parts: Closure, Scope & Execution Context