On Thu, Nov 11, 2010 at 5:10 PM, Allen Wirfs-Brock <span dir="ltr">&lt;<a href="mailto:Allen.Wirfs-Brock@microsoft.com">Allen.Wirfs-Brock@microsoft.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I believe that would be interoperable as long as each such function is only declared and used within a single block. †Multiple declarations with the same function name in separate blocks wouldn&#39;t be interoperable among all browsers.<br>
</blockquote><div><br></div><div>Not quite. It will be incompatible with ES5/strict on those ES5 implementations that follow &lt;<a href="http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls">http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls</a>&gt;.</div>
<div><br></div><div>For the example code you show under the assumptions you state, if you move the function declaration into the top level of the containing function or program, then it will be compat with ES5/strict best practice as well, and still with everything else.</div>
<div><br></div><div>†</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888"><br>
Allen<br>
</font><div><div></div><div class="h5"><br>
&gt; -----Original Message-----<br>
&gt; From: Michael Day [mailto:<a href="mailto:mikeday@yeslogic.com">mikeday@yeslogic.com</a>]<br>
&gt; Sent: Thursday, November 11, 2010 4:48 PM<br>
&gt; To: Brendan Eich<br>
&gt; Cc: ES-Discuss; Allen Wirfs-Brock<br>
&gt; Subject: Re: Function declarations as statements<br>
&gt;<br>
&gt; Hi Brendan and Allen,<br>
&gt;<br>
&gt; Thanks for the pointers.<br>
&gt;<br>
&gt; &gt; So for Harmony, we are reclaiming function in block (must be a direct child of<br>
&gt; a braced block) to bind a block-local name on block entry (so hoisting lives, but<br>
&gt; only to top of block -- so you can&#39;t emulate with var f = function ...).<br>
&gt;<br>
&gt; If we implemented this behaviour now, I think that would be sufficient to make<br>
&gt; JQuery and RaphaŽl work. Here is an example from JQuery that is giving us<br>
&gt; trouble:<br>
&gt;<br>
&gt; if (condition) {<br>
&gt; † † †var val, props, ... ;<br>
&gt;<br>
&gt; † † †function getWH() { ... this is the function ... }<br>
&gt;<br>
&gt; † † †if ( elem.offsetWidth !== 0 ) {<br>
&gt; † † † † †getWH();<br>
&gt; † † †} else {<br>
&gt; † † † † †jQuery.swap( elem, props, getWH );<br>
&gt; † † †}<br>
&gt;<br>
&gt; † † †return Math.max(0, Math.round(val)); }<br>
&gt;<br>
&gt; The getWH() function is declared in the block and only used in the block, so if we<br>
&gt; hoisted the definition to the top of the block there would not be any problems<br>
&gt; with this usage.<br>
&gt;<br>
&gt; Best regards,<br>
&gt;<br>
&gt; Michael<br>
&gt;<br>
&gt; --<br>
&gt; Print XML with Prince!<br>
&gt; <a href="http://www.princexml.com" target="_blank">http://www.princexml.com</a><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>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>† † Cheers,<br>† † --MarkM<br>