<p dir="ltr">It is my understanding that in both cases the declaration are valid but calling inner before "let x" will result in an exception. </p>
<div class="gmail_quote">On Jul 18, 2014 5:34 PM, "Shu-yu Guo" <<a href="mailto:shu@mozilla.com">shu@mozilla.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi all,<br>
<br>
Am I correct in understanding that body-level inner functions hoist both declaration *and* initialization to the top of the outer function?<br>
<br>
That is, given the following snippet:<br>
<br>
Listing 1<br>
---------<br>
function outer() {<br>
  let x;<br>
  function inner() {<br>
    x = 2;<br>
  }<br>
}<br>
<br>
Is it equivalent to the following?<br>
<br>
Listing 2<br>
---------<br>
function outer() {<br>
  var inner = function inner() {<br>
    x = 2;<br>
  };<br>
  let x;<br>
}<br>
<br>
If so, that means in inner functions, all free uses of let-declared variables from outer lexical scopes are in the ES6 "temporal dead zone". More problematically, it means that there is no-easy-to-compute dominance relation (i.e., at parse time) to omit the dead zone checks for any upvar uses of let bindings, even though textually, listing 1 looks like the initialization dominates all uses.<br>

<br>
--<br>
shu<br>
<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>