I absolutely agree with you about the importance of first-class functions and closures for async programming.<p>However, I disagree with your number (1).  First, you shouldn&#x27;t have to use &quot;var self = this;&quot; very often, unless this is your preferred style.  Many JS libraries will let you pass in the context as the final argument in a function call.  And if you can&#x27;t do this, you should look to `bind` and `apply`, they&#x27;re very handy for handling contexts [1].<p>I do strongly agree with your (2).  But if I&#x27;m not mistaken, the latest versions of many browsers do support block scope already.  I know Chrome does, and Firefox and Edge may as well.<p>1. <a href="http:&#x2F;&#x2F;javascriptissexy.com&#x2F;javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals&#x2F;" rel="nofollow">http:&#x2F;&#x2F;javascriptissexy.com&#x2F;javascript-apply-call-and-bind-m...</a>