Inner functions and outer 'this' (Re: That hash symbol)

Claus Reinke claus.reinke at
Sun Mar 27 09:39:38 PDT 2011

> Further, how would this interact with eval introducing (or in 
> some systems even removing) lexical bindings?  

Disclaimer 1: the Berkling-style systems I'm familiar with did 
    not support eval, so I cannot argue from experience here

Disclaimer 2: the reason for this was that unlimited reflection
    support breaks all equational theories about programs
    (eg toString can distinguish otherwise semantically
    equivalent programs, so only identical programs can be
    considered equal if reflection is taken into account) and
    equational reasoning was core to reduction languages

Eval already breaks lexical scoping, so there is little hope of 
it having no interactions with extensions of lexical scoping.

One might limit "eval('code')" not to have any effect on
the context's lexical scope chain, but that would indeed
limit eval's functionality (the eternal conflict between
expressiveness and reasoning). Limiting eval/toString
to be unaffected by the context's local scope chain would
also be possible, but again, that would mean changing
a lot of code.

Since all that an implementation or programmer has to 
go with in the presence of eval is the lexical scope chain 
at any point of execution, adding protection is probably 
not going to make matters worse wrt eval. Similarly, 
toString can already distinguish between codes that
differ only by renaming.

Is that sufficiently vague / reassuring?-)

> Nevertheless this 35-year-old idea seems fresh in the 
> context of ECMAScript development, and worth 
> thinking about, so thanks for bringing it up.

Always happy to promote a good idea!-)



More information about the es-discuss mailing list