At a quick glance what do you think the value of 'y' will be at each alert?
In the first pass, the function is parsed and all local variables are moved to the top of the function. And the second pass runs it. So in reality the script looks like this by the time it is run:
<script src="https://gist.github.com/1176159.js"> </script>
Notice that 'var y', and not 'var y = 2' was moved to the top of the function. By declaring an unset local variable at the top of the function the global 'y' variable is overwritten, causing 'alert 2' to be undefined.
I am a web developer for Element Fusion living in Oklahoma City, OK. I've been developing in .Net web technologies since the summer of 2009. I enjoy working in Asp.Net MVC along with tinkering with other new web technologies.