<div dir="ltr">(In all fairness, Andrea was merely, and quite explicitly so, asking for the rationale behind the fat arrow, not a scrutiny of his examples. Tab's sarcastic response was unnecessary on a whole different level, too.)</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 2, 2013 at 1:14 PM, Benjamin (Inglor) Gruenbaum <span dir="ltr"><<a href="mailto:inglor@gmail.com" target="_blank">inglor@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 dir="ltr"><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">There are two things here:</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div>

<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> - In JS I (as well as most code in libraries I read) tend to use function expressions a lot. The arrow notation is easier to read in my opinion. It's shorter and more concise. That's a weak argument for it, but I think just making the language more concise is an argument on its own.</span></div>


<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> - While we're making function expressions shorter, let's fix `this` function expresisons. Pretty much every host environment be it node, the web browser or embedding uses deferred execution and event loop driven concurrency at some level.</span></div>


<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">While there is nothing in JavaScript itself that dictates this sort of concurrency in practice events are used extensively when coding JavaScript. Using an object and adding handlers that need a reference to that object is very common in the browser and in node.</span></div>


<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">It's very common in practice and having lexical this in arrow functions seems very useful. An indicator might be that in languages that support it like CoffeeScript you see it used all the time, and the fact you see people using the `this=that/self/_this` ""pattern"" all the time. That pattern introduces its own set of problems - for example it creates a closure scope where one might not be needed and it's boilerplate.</span></div>


<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><font face="arial, sans-serif">Having fat arrow lets us solve that.</font></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br>


</span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Benjamin Gruenbaum </span></div><div class="im"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br>


</span></div>---------- Forwarded message ----------</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">From: Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">


<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">To: "Tab Atkins Jr." <<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>></span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">


<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Cc: "<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>" <<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>></span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">


<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Date: Tue, 1 Oct 2013 19:35:28 -0700</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Subject: Re: what kind of problem is this fat arrow feature trying to solve ?</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">


</div><div dir="ltr" style="font-family:arial,sans-serif;font-size:12.800000190734863px"><div class="im">setTimeout accept extra arguments ... I write JavaScript that uses this feature.<div><br></div><div>`setTimeout(callback, delay, arg1, arg2, argN, evenAnObject);`</div>


<div><br></div></div><div class="im"><div>so fat arrow does not solve much here, I can use self as first argument and I am good.</div><div><br></div><div>`forEach` and all other arrays accept a second argument</div><div>
<br></div><div>`array.forEach(doStuff, boundContextObject);`</div>

<div><br></div><div>so fat arrow does not solve a thing in mostly all Array extras.</div><div><br></div></div><div>for **DOM** I use handlers as specified by **W3C** so that `{handleEvent: function () {this}}` works better than any mess I could create with callbacks that I won't be unable to remove later on (as I've said) ... so I can use `removeEventListener(this)` in every method handled by that object.</div>
<div class="im">

<div><br></div><div>So I actually wonder what kind of JavaScript **you** write because this was a honest question but probably ... people not familiar with JS are the answer: since developers ignore part of JS specs available since every then we need a fat arrow to break old syntax to make the creation of self bound function easier.</div>


<div><br></div></div><div class="im"><div>This would be already an answer so thanks for participating.</div><div><br></div><div>br</div></div></div></div>
<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>
<br></blockquote></div><br></div>