On Mon, Sep 10, 2012 at 2:47 PM, Jason Orendorff <[email protected]>wrote:
> On Mon, Sep 10, 2012 at 2:59 PM, Tobie Langel <[email protected]> > wrote: > > On Sep 10, 2012, at 9:48 PM, Jason Orendorff <[email protected]> > wrote: > > > >> On Mon, Sep 10, 2012 at 12:50 PM, Kevin Smith <[email protected]> > wrote: > >>>>> function f(x=EXPR1, y=EXPR2) { BODY } > >>>>> ===> > >>>>> function f(x, y) { > >>>>> if (x === void 0) x = EXPR1; > >>>>> if (y === void 0) y = EXPR2; > >>>>> BODY > >>>>> } > >>> > >>> I'm not so sure - the desugaring above would mean that default > expressions > >>> would have visibility across curly-brace boundaries, which I find to be > >>> quite surprising. > >> > >> It is surprising. It could even bite unwary programmers. But in what > >> scope do you propose to evaluate default-param expressions? > > > > In their lexical scope. > > This isn't a complete answer. As it stands, the lexical scope of > arguments is the same as the scope of everything else in the function > body. Which leaves us with exactly what I was saying earlier. > > I guess "lexical" here was meant the function definition scope, not the parameters. So in your later example: var FOO = 2; function bar(y = FOO + 3) { return y; } The lexical scope of "y" is obviously the function body. However, the lexical scope of "FOO" (from top-down viewing of the code) is the outer scope, where "bar" function is defined. So this should resolve to: bar(); // 5 However, to avoid Python's issues with definition type bindings for defaults, ES can eval every time at activation (in the bar.[[Scope]] object, i.e. directly parent, but not the activation one). FOO = 45; bar(); // 48 Use cases like: function bar(y = FOO + 3) { var FOO = 10; return y; } My look subtle, however, if again to accept lexical scope as the function definition, then FOO again should be resolved in the bar.[[Scope]], not in the bar's activation: bar(); // still 48 P.S.: sorry, didn't have a change to read the whole discussion, apologies if it was noted already. Dmitry
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

