A bit confused by B.3.2 - Web Legacy Compatibility for Block-Level Function Declarations

John Lenz concavelenz at gmail.com
Thu Jun 5 08:14:05 PDT 2014


On Wed, Jun 4, 2014 at 8:52 PM, Allen Wirfs-Brock <allen at wirfs-brock.com>
wrote:

>
> On Jun 4, 2014, at 2:43 PM, John Lenz <concavelenz at gmail.com> wrote:
>
> >
> >
> >
> >
> >
> > How does someone write code to make sure it doesn't fall into legacy
> semantics?  Unless, I misunderstand these rules seem like a refactoring
> hazard.  It would seem better to say: sloppy mode === no block scoped
> function declarations.  strict mode === block scoped function declarations.
>
> We don’t want to leave the meaning of function declarations in blocks
> completely unspecified, as in ES1-5 as we; know there are legacy
> compatibility requirements for them.  So, we need to have some semantics
> for them.  The easiest way to provide any semantics is to simply use the
>  same  block scoping semantics that is used in strict mode (slight
> augmented to  over the legacy intersection semantics).  That actually
> limits the refactoring hazard because as long as you have no code that
> depends upon the legacy intersection there is no difference between the
> function in block strict and sloppy semantics.
>
>
It is the slightly augmented part that seems to be the problem here.  It is
(1) very confusing and (2) creating the refactoring hazard: introducing a
function of the same name in a different block breaks the scoping.  I would
be happy to be misunderstanding that section.


> Allen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140605/421e9340/attachment.html>


More information about the es-discuss mailing list