http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html