<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Feb 2, 2012, at 2:07 AM, Claus Reinke wrote:</div><blockquote type="cite"><div><font class="Apple-style-span" color="#000000"><br></font><blockquote type="cite"><blockquote type="cite">and embed the assignment in an eval:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">function f(a) {<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">   eval("arguments[0]=2");<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">   return a<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">}<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">print(f(1));  // 2 or 1?<br></blockquote></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">same as above, same as ES5<br></blockquote><br>But if I put this in a module, f will be in extended strict mode, while<br>the eval code will default to non-extended non-strict mode, right?<br>Which wouldn't quite be the same as in the version without eval.<br></div></blockquote><div><br></div><div>Per ES5 10.1.1, the code will be strict code--direct eval from strict code always processes the eval coce as strict code.</div><div><br></div><div>Allen</div></div></body></html>