Generator issue: exceptions while initializing arguments
Brendan Eich
brendan at mozilla.org
Sat Sep 8 15:20:39 PDT 2012
SpiderMonkey (Firefox 15 and newer has default parameters):
js> function f(a = g) { function g(){}; return a; }
js> f()
function g(){}
So function g is hoisted and a defaults to it, as expected.
The trivial generator variant, i.e., what you get by putting a * after
function and before f, above:
js> function* f(a = g) { function g() {}; return a; }
js> var it = f();
js> it.next();
function g(){}
(note well, not yet implemented in SpiderMonkey) should behave the same,
or crazypants.
/be
Brendan Eich wrote:
> Brendan Eich wrote:
>>> However, the semantics of parameter default value initialization
>>> can result in exceptions and more closely links argument
>>> instantiations with the actual activation of the generator function.
>>> You can't really build the parameter bindings without performing
>>> declaration instantiation for the function.
>>
>> Agreed, that's absolutely true (no "really" about it -- or rather,
>> "for real" ;-).
>
> And (I should have written), if your point was that we must bind all
> var and top level function/let/const declarations before the implicit
> yield; inserted "after the opening brace", I don't see a problem.
> Hoisted functions with usable initial values, hoisted vars with
> undefined initial values, and temporal dead zones for the let and
> const declarations that are at top (generator body) level. Right?
>
> /be
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
More information about the es-discuss
mailing list