Hi,

@Andrea Giammarchi
Sorry, perhaps I didn't express myself clearly. I use .call() to manually
bind the context "this" to a function, and yes, the last one is exactly
what I need, accessing both contexts (inner and outer) which I couldn't
manage without using an additional variable, as described in the following
snippet:

```js
function outer() {
  const inner = function (_this = this) {
    console.log(this.b, _this.a);
  };
  inner.call({b: 1});
}
outer.call({a: 2});
```

@Jason Orendorff
I see. If JavaScript is going to support calling class functions with class
members as default parameters, it has to parse the default values with the
given "this" context at calling. Perhaps that's also the reason why the
most language does not support this feature, like C++ and Python..... but
it's JavaScript :)

Thanks guys for the patient explanation.

Yours,
Charles Weng

On Fri, Jan 29, 2016 at 10:41 PM Jason Orendorff <jason.orendo...@gmail.com>
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.
>
> Of the rest, I suspect *most* refer to previous parameters:
>
>     function send(sender, recip, message, onBehalfOf=sender) { ... }
>
> or the `this` for the current method call:
>
>     class MyArray {
>         ...
>         slice(start=0, stop=this.length) { ... }
>     }
>
> The only way to support these is to put the arguments in scope.
>
> (Another reason is consistency. This is how `var` initializers already
> work, and have always worked: initializers are in the scope of the
> bindings being initialized, and can use the values of previously
> initialized bindings on the same line of code.)
>
> -j
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to