<br><br><div class="gmail_quote">On Sat, Aug 27, 2011 at 11:53 PM, John-David Dalton <span dir="ltr"><<a href="mailto:john.david.dalton@gmail.com">john.david.dalton@gmail.com</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">> No. It's the global object what is the base (more precisely, its DOM's proxy wrapper -- `window` or either the global itself), but not an environment record.<br>
<br>
</div>So basically the only kind of MemberExpression allowed is a PrimaryExpression?<br></blockquote><div><br></div><div><br></div><div>If it will be easier for you to remember (and what is actually is written in the reference I gave), _only_ `eval` call written in the following syntactic form is direct:</div>
<div><br></div><div>eval(...)</div><div><br></div><div>Only. _All_ the other cases are indirect.</div><div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
So writing it out is like:<br>
 <a href="http://es5.github.com/#x8.7.1" target="_blank">http://es5.github.com/#x8.7.1</a><br>
 `window.eval` -> GetValue(`window.eval`) -> `window` is seen as the<br>
base so it<br>
 goes to step 4 of 8.7.1 and not step 5 (which is for environment records).<br>
<br></blockquote><div><br></div><div>Right.</div><div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
ES3 makes it a bit more clear:<br>
"If value of the eval property is used in any way other than a direct<br>
call (that is, other than by the<br>
explicit use of its name as an Identifier which is the<br>
MemberExpression in a CallExpression), or if the<br>
eval property is assigned to, an EvalError exception may be thrown."<br>
<br></blockquote><div><br></div><div>Yes, perhaps.</div><div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Though older browsers w/ their older implementations will barf on `(1,<br>
eval)()` but not `window.eval(..)` for some reason.<br>
<div class="im"><br></div></blockquote><div><br></div><div>I think the main word is "may" why it is so. If it would "should", then maybe implementations would throw SyntaxError in both cases.</div><div>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">
> No, it's indirect.<br>
><br>
> <a href="http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/#indirect-eval-call" target="_blank">http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/#indirect-eval-call</a><br>
<br>
</div>I knew you would chime in with a link to your post, which is why I<br>
wrote I read the notes associated with the link I posted (your post<br>
was one of the notes) :P<br>
<font color="#888888"><br></font></blockquote><div><br></div><div>Is there something unclear in my explanation? Want to propose to improve something?</div><div><br></div><div>Dmitry.</div></div>