Is this intentional?
14.1 Function Definitions
---
FunctionDeclaration[Yield, Default] :
function BindingIdentifier[?Yield] ( FormalParameters ) { FunctionBody }
[+Default] function ( FormalParameters ) { FunctionBody }
FunctionExpression :
function BindingIdentifieropt ( FormalParameters ) { FunctionBody }
---
14.2 Arrow Function Definitions
---
When the production
ArrowParameters[Yield] :
CoverParenthesizedExpressionAndArrowParameterList[?Yield]
is recognized the following grammar is used to refine the interpretation of
CoverParenthesizedExpressionAndArrowParameterList:
ArrowFormalParameters[Yield, GeneratorParameter] :
( StrictFormalParameters[?Yield, ?GeneratorParameter] )
---
Following the production rules for StrictFormalParameters and FormalParameters
you can end up at SingleNameBinding
SingleNameBinding[Yield, GeneratorParameter] :
[+GeneratorParameter] BindingIdentifier[Yield] Initializer[In]opt
[~GeneratorParameter] BindingIdentifier[?Yield] Initializer[In, ?Yield]opt
This looks like it suggests following:
var yield;
function* gf() {
function f(yield = yield) { } // valid parse, both yields are identifiers,
second binds to the global var
var f = function (yield = yield) { }; // same deal
var a = (yield = yield) => { }; // first yield is treated as keyword,
doesn't parse, second is treated as identifier and again binds to the global var
}
Binding to the global var in the default argument expressions is weird and
perhaps confusing but acceptable I suppose.
The inconsistency of the formal name treatment between functions and arrow
functions feels wrong to me given that the formal names are created in
non-generator scopes.
Ian
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss