On Sun, Jan 31, 2016 at 3:59 PM, Bergi <a.d.be...@web.de> wrote: > Jason Orendorff wrote: >> On Fri, Jan 29, 2016 at 8:14 AM, ` Mystery . <mystery...@gmail.com> wrote: >>> IMHO I don't think the default parameters should be evaluated within the >>> context of the function being called, at least not while it's outside of >>> function body's region...... Is there a specific reason to do that, or >>> it's >>> just a design preference? >> >> Sure, there is a reason: it's about how defaults are used. >> >> Most defaults are probably constants or empty objects. Those don't >> need to refer to any variables at all, so we can set them aside. > > Well, primitive-valued constants are fine. But if you have an empty object > constant, which is statically attached to the function instance instead of > being re-evaluated at every call, that would surely cause enough havoc > already :-)
I was about to send almost this exact reply. ^_^ This is actually *very* important, and can't be set aside - Python got it wrong, which is why if you want an argument to default to an empty list, for example, you have to do: def foo(bar=None): # or any sentinel value, but None is almost always usable if bar is None: bar = [] ... Otherwise you get a single array created at function definition time and shared by all calls that default that parameter. ^_^ JS made the right ergonomic decision for this, but of course some use-cases are negatively affected in the trade-off, but none of them are made impossible, or even difficult, as several people in this thread have shown. ~TJ _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss