<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jan 21, 2015, at 10:21 AM, Brendan Eich wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Felix Kling wrote:<br><blockquote type="cite">[Section 14.2.17](<a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-arrow-function-definitions-runtime-semantics-evaluation">https://people.mozilla.org/~jorendorff/es6-draft.html#sec-arrow-function-definitions-runtime-semantics-evaluation</a>) says<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><blockquote type="cite">Any reference to `arguments`, `super`, or `this` within an *ArrowFunction* are resolved to their bindings in the lexically enclosing function.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">However, what if there is no enclosing function? Shouldn't this say "enclosing environment"?<br></blockquote></div></blockquote><div><br></div><div>Well, that's just an informative note and not normative language.  The details are actually more complicated than  what is summarized there.  The fuller story, if that using 'super' in a top level arrow function produces an early error (see <a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-scripts-static-semantics-early-errors">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-scripts-static-semantics-early-errors</a> and <a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-module-semantics-static-semantics-early-errors">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-module-semantics-static-semantics-early-errors</a> ).  'this' and 'arguments' are just resolved via lexical lookup ('this' actually uses a special lookup mechanism) and may resolve to top level bindings.  </div><div><br></div><div>Substituting "environment" for "environment" is not exactly the right thing either because the enclosing environment may be a block environment which can't define 'this' but can define 'arguments' (in non-strict code). </div><div><br></div><div>What that note was trying to draw attention to is that arrow functions do not define their own bindings for 'this', 'super', and 'arguments' and that those are typically bound by some enclosing function.</div><div><br></div><div>Writing such notes is kind of tricky. They are intended to be clarifying but are not intended to replace  the need to read and understand the actual normative specification language.  By their nature, notes are less complete then the actual normative language (it is actually a bug to fully replicate the normative spec. in such notes).</div><div><br></div><div>Thanks for pointing this out.  I like to get this sort of bug report because my assumption is that if even one person finds some text unclear then many others will also have the problem. Please file bugs when you find material that you find misleading or difficult to understand.</div><div><br></div><div>I already have some ideas for making this note clearer and better emphasizing its key points.</div><div><br></div><blockquote type="cite"><div><br>Good catch, probably best to file a bug at this point:<br><br><a href="http://bugs.ecmascript.org/">http://bugs.ecmascript.org/</a><br><br><blockquote type="cite">If yes, what would be the expected behavior of an arrow function that references `this` and `arguments`?<br></blockquote><blockquote type="cite">I assume in case of `this`, it would just resolve to the *thisBinding* of the environment (if there is one). Since there is no `arguments` binding (by default) I assume accessing `arguments` would throw a reference error.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Is my understanding correct? <br></blockquote></div></blockquote><div><br></div>Yes, it all falls out of the normative spec. language.</div><div><br><blockquote type="cite"><div><br>I think so, but SpiderMonkey has a bug, so it's hard to test that implementation.<br><br><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=889158">https://bugzilla.mozilla.org/show_bug.cgi?id=889158</a><br><br>/be<br>_______________________________________________<br>es-discuss mailing list<br>es-discuss@mozilla.org<br>https://mail.mozilla.org/listinfo/es-discuss<br><br></div></blockquote></div><br></body></html>