<div dir="ltr">Thanks, this clarifies things. I'll update the answer on SO to reflect the findings. </div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 9, 2014 at 3:54 AM, André Bargull <span dir="ltr"><<a href="mailto:andre.bargull@udo.edu" target="_blank">andre.bargull@udo.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Thanks for the reply.<br>
<br>
I'd actually expect `undefined` because function declarations does not<br>
return anything. Converting it to a function expression kind of misses the<br>
point since those are well... expressions :)<br>
<br>
I've tried looking in all the relevant places in the spec but still<br>
couldn't unambiguously figure out which browser is 'correct'.<br>
</blockquote>
<br></div>
There are a few edge cases in reference resolution which are not correctly implemented in most browsers. Your example is basically the same as test case 2 from <a href="https://bugs.ecmascript.org/show_bug.cgi?id=1751" target="_blank">https://bugs.ecmascript.org/<u></u>show_bug.cgi?id=1751</a>. The relevant section in the specification is "12.13.4 Runtime Semantics: Evaluation": The left hand side of an assignment is always evaluated before the right hand side. This includes resolving and remembering the reference information for an identifier reference. In this case the identifier reference resolves to a binding on the global object, so assignment must be performed on the global, even if a (direct) eval expression introduces new bindings with the same name in the current scope.<span class="HOEnZb"><font color="#888888"><br>


<br>
<br>
- André<br>
</font></span></blockquote></div><br></div>