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