Good catches...

On Jul 17, 2015, at 5:12 PM, Kevin Gibbons wrote:

> In ECMAScript 2015, functions declared at the top level of function bodies 
> and of scripts are var-like and functions declared in blocks are let-like 
> (visible only in that block), generally speaking. This breaks some previously 
> common patterns using block-level function declarations, which were not a 
> part of ECMAScript 5 but were commonly supported in browsers, albeit with 
> varying semantics. Thus, the ECMAScript 6 spec has an extension (annex B.3.3) 
> which is intended to minimize this breakage by allowing function declarations 
> in blocks to *also* be var-like when possible. This means that they create an 
> additional binding in the containing function's scope which is assigned when 
> execution reaches the block function declaration.
> 
> However, B.3.3 looks for functions that permit these additional bindings 
> among the containing function's VarScopedDeclarations, which essentially 
> consists of top-level function declarations and any var declarations. 
> Importantly, it does not include any function declarations inside of blocks, 
> and so will never be applied.
> 
> Unfortunately, the function body's LexicallyScopedDeclarations will also fail 
> to contain function declarations inside of blocks. No existing static 
> semantic rule will include the desired function declarations; changing the 
> spec to accommodate this may require substantial additions beyond the scope 
> of this email.

Right, see fix in https://bugs.ecmascript.org/show_bug.cgi?id=4427 

> 
> Also, I observe that these additional compatibility steps are only performed 
> for function bodies, not scripts. I'm not sure if this is intentional, but 
> it's a bit counterintuitive: `(function(){ { function f(){} } f(); })();` 
> continues to work with no reference errors, but `{ function f(){} } f();` 
> does not.

See fix in https://bugs.ecmascript.org/show_bug.cgi?id=4428 

Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to