<div>š</div><div>If you're looking for optimizations, nested closures is not a place where you generally want to be. Create a function out of the scope and call it with all needed variables since function calling is cheap nowadays, and arguments already behave the way you're describing.</div><div>š</div><div>š</div><div>25.12.2013, 15:29, "raul mihaila" <raul.mihaila@gmail.com>:</div><blockquote type="cite"><div><span style="font-family:arial,sans-serif;font-size:13px;">@Alex Kocharin:</span><br /><div><span style="font-family:arial,sans-serif;font-size:13px;">š</span></div><div><span style="font-family:arial,sans-serif;font-size:13px;">I would't call the functions like time. It was only a very simple example. Often my functions would be called from outside so I wouldn't be able to pass the values. Also the main reason I want this is for optimizations, so as you pointed out, can't use the ugly with.</span></div></div><div><br /><br /><div>On Tue, Dec 24, 2013 at 10:00 PM, <span><<a href="mailto:es-discuss-request@mozilla.org" target="_blank">es-discuss-request@mozilla.org</a>></span> wrote:<br /><blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex;">Send es-discuss mailing list submissions to<br /> š š š š <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br /> <br /> To subscribe or unsubscribe via the World Wide Web, visit<br /> š š š š <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br /> or, via email, send a message with subject or body 'help' to<br /> š š š š <a href="mailto:es-discuss-request@mozilla.org">es-discuss-request@mozilla.org</a><br /> <br /> You can reach the person managing the list at<br /> š š š š <a href="mailto:es-discuss-owner@mozilla.org">es-discuss-owner@mozilla.org</a><br /> <br /> When replying, please edit your Subject line so it is more specific<br /> than "Re: Contents of es-discuss digest..."<br /> <br />Today's Topics:<br /> <br /> š š1. Deep Object Observing (Eric Devine)<br /> š š2. Re: Deep Object Observing (Brendan Eich)<br /> š š3. local variables with inherited values (raul mihaila)<br /> š š4. Re: local variables with inherited values (Alex Kocharin)<br /> š š5. Re: local variables with inherited values (Brendan Eich)<br /> <br /><br />---------- Forwarded message ----------<br />From:šEric Devine <<a href="mailto:devineej@gmail.com">devineej@gmail.com</a>><br />To:š<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br />Cc:š<br /> Date:šMon, 23 Dec 2013 21:26:09 -0500<br />Subject:šDeep Object Observing<br /><div>New to the forum here.<div>š</div><div>I've been experimenting with the Polymer-Project "prolyfill" Node.prototype.bind() function, and have rolled an implementation of my own that is dependent on Object.observe and MutationObserver.<br /> <br />The function binds to a path relative to a given object, so it must not only observe the descendant property, but it also must observe every object between and be able to recursively reconstruct the "chain" if a "link" is replaced, andšrecursivelyšunobserve the replaced "links".</div><div>š</div><div>The recursive function to accomplish this is simple enough, but the memory footprint has the potential to become expensive when scaled.</div><div>š</div><div>I feel this feature is a good candidate for a native implementation. Is there any plans to bring the concept of deep object observing to ES?</div><div>š</div><div>Thanks for your time,</div><div>Eric</div></div><br /><br />---------- Forwarded message ----------<br />From:šBrendan Eich <<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>><br />To:šEric Devine <<a href="mailto:devineej@gmail.com">devineej@gmail.com</a>><br /> Cc:š<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br />Date:šMon, 23 Dec 2013 22:01:29 -0500<br />Subject:šRe: Deep Object Observing<br />Eric Devine wrote:<br /><blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex;">The recursive function to accomplish this is simple enough, but the memory footprint has the potential to become expensive when scaled.<br /> <br /> I feel this feature is a good candidate for a native implementation. Is there any plans to bring the concept of deep object observing to ES?</blockquote><br /> No, but I have to ask: why do you think native would be better than JS self-hosted in terms of memory footprint?<br /> <br /> Possibly related: <a href="http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/" target="_blank">http://swannodette.github.io/<u></u>2013/12/17/the-future-of-<u></u>javascript-mvcs/</a>.<br /> <br /> /be<br /> <br /> <br /><br />---------- Forwarded message ----------<br />From:šraul mihaila <<a href="mailto:raul.mihaila@gmail.com">raul.mihaila@gmail.com</a>><br />To:šes-discuss <<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br /> Cc:š<br />Date:šTue, 24 Dec 2013 19:10:19 +0200<br />Subject:šlocal variables with inherited values<br /><div>Merry Christmas!<div>š</div><div>Did you consider adding a way for variables to automatically get the value from a variable with the same name from the parent execution context?</div><div>š</div><div>(function () {</div><div>š š var x = 2;</div><div>š šš</div><div>š š (function () {</div><div>š š š š local x; // x = 2</div><div>š š š š x = 100;</div><div>š š š š x; // x = 100</div><div>š</div><div>š š š š local y; // maybe throw since y was not found anywhere</div><div>š š })();</div><div>š</div><div>š š x; // x = 2</div><div>})();š</div><div>š</div><div>This would be useful when optimizing the code so that the variables are as local as possible. Especially useful with calling functions (multiple times) or working heavily with collections from the outer context in the inner functions.</div></div><br /><br />---------- Forwarded message ----------<br />From:šAlex Kocharin <<a href="mailto:alex@kocharin.ru">alex@kocharin.ru</a>><br />To:šes-discuss <<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br /> Cc:š<br />Date:šTue, 24 Dec 2013 21:34:03 +0400<br />Subject:šRe: local variables with inherited values<br /><div>š</div><div>;(function() {</div><div>š var x = 2</div><div>š</div><div>š ;(function(x) {</div><div>ššš x = 100</div><div>ššš x // x = 100</div><div>š })(x)</div><div>š</div><div>š x // x = 2</div><div>})()</div><div>š</div><div>Wow, it works already. You just have to write a bit less semicolons there. Merry Christmas! :)</div><div>š</div><div>Also this:</div><div>š</div><div><div>;(function() {</div><div>š var x = 2</div><div>š</div><div>š with({x: x}) {</div><div>ššš x = 100</div><div>ššš x // x = 100</div><div>š }</div><div>š</div><div>š x // x = 2</div>})()</div><div>š</div><div>But js engines don't appreciate that one. :(</div><div>š</div><div>š</div><div>24.12.2013, 21:10, "raul mihaila" <<a href="mailto:raul.mihaila@gmail.com" target="_blank">raul.mihaila@gmail.com</a>>:</div><blockquote type="cite"><div>Merry Christmas!<div>š</div><div>Did you consider adding a way for variables to automatically get the value from a variable with the same name from the parent execution context?</div><div>š</div><div>(function () {</div><div>š š var x = 2;</div><div>š šš</div><div>š š (function () {</div><div>š š š š local x; // x = 2</div><div>š š š š x = 100;</div><div>š š š š x; // x = 100</div><div>š</div><div>š š š š local y; // maybe throw since y was not found anywhere</div><div>š š })();</div><div>š</div><div>š š x; // x = 2</div><div>})();š</div><div>š</div><div>This would be useful when optimizing the code so that the variables are as local as possible. Especially useful with calling functions (multiple times) or working heavily with collections from the outer context in the inner functions.</div></div>,<p>_______________________________________________<br />es-discuss mailing list<br /><a href="mailto:es-discuss@mozilla.org" target="_blank">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></p></blockquote><br /><br />---------- Forwarded message ----------<br />From:šBrendan Eich <<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>><br />To:šraul mihaila <<a href="mailto:raul.mihaila@gmail.com">raul.mihaila@gmail.com</a>><br /> Cc:šes-discuss <<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br />Date:šTue, 24 Dec 2013 12:53:36 -0500<br />Subject:šRe: local variables with inherited values<br />ES4 had let (x = x) ... forms (where ... was an expression or a body), but for ES6 we agreed on the temporal dead zone:<br /> <br /> š { let x = 'outer'; { /* x throws here */; let x = 'inner'; alert(x); } alert(x); }<br /> <br /> which will alert 'inner' then 'outer'. There is no way to initialize the inner x from the outer. The reason for temporal dead zone is given by counterexamples against the alternatives. Quoting from Waldemar Horwant at:<br /> <br /> <a href="https://mail.mozilla.org/pipermail/es-discuss/2008-October/007807.html" target="_blank">https://mail.mozilla.org/<u></u>pipermail/es-discuss/2008-<u></u>October/007807.html</a><br /> <br /> """<br /> There are four ways to do this:<br /> <br /> A1. Lexical dead zone. šReferences textually prior to a definition in the same block are an error.<br /> A2. Lexical window. šReferences textually prior to a definition in the same block go to outer scope.<br /> B1. Temporal dead zone. šReferences temporally prior to a definition in the same block are an error.<br /> B2. Temporal window. šReferences temporally prior to a definition in the same block go to outer scope.<br /> <br /> Let's take a look at an example:<br /> <br /> let x = "outer";<br /> function g() {return "outer"}<br /> <br /> {<br /> š g();<br /> š function f() { ... x ... g ... g() ... }<br /> š f();<br /> š var t = some_runtime_type;<br /> š const x:t = "inner";<br /> š function g() { ... x ... }<br /> š g();<br /> š f();<br /> }<br /> <br /> B2 is bad because then the x inside g would sometimes refer to "outer" and sometimes to "inner".<br /> <br /> A1 and A2 introduce extra complexity but doesn't solve the problem. šYou'd need to come up with a value for x to use in the very first call to g(). šFurthermore, for A2 whether the window occurred or not would also depend on whether something was a function or not; users would be surprised that x shows through the window inside f but g doesn't.<br /> <br /> That leaves B1, which matches the semantic model (we need to avoid referencing variables before we know their types and before we know the values of constants).<br /> """<br /> <br /> Raul, you seem to want A2 or possibly B2, I'm not sure which. I hope this helps make the case for B1, temporal dead zone.<br /> <br /> It may seem unusual compared to languages that do not have closures, or that require declarations to come before any closures.<br /> <br /> /be<br /> <br /><blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex;">raul mihaila <mailto:<a href="mailto:raul.mihaila@gmail.com" target="_blank">raul.mihaila@gmail.com</a><u></u>><br /> December 24, 2013 12:10 PM<br /> Merry Christmas!<br /> <br /> Did you consider adding a way for variables to automatically get the value from a variable with the same name from the parent execution context?<br /> <br /> (function () {<br /> š š var x = 2;<br /> š š (function () {<br /> š š š š local x; // x = 2<br /> š š š š x = 100;<br /> š š š š x; // x = 100<br /> <br /> š š š š local y; // maybe throw since y was not found anywhere<br /> š š })();<br /> <br /> š š x; // x = 2<br /> })();<br /> <br /> This would be useful when optimizing the code so that the variables are as local as possible. Especially useful with calling functions (multiple times) or working heavily with collections from the outer context in the inner functions.<br /> ______________________________<u></u>_________________<br /> es-discuss mailing list<br /> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br /> <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/<u></u>listinfo/es-discuss</a></blockquote><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></div>,<p>_______________________________________________<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">https://mail.mozilla.org/listinfo/es-discuss</a></p></blockquote>