non-strict direct eval in top level scope

Brendan Eich brendan at mozilla.org
Thu Jan 22 17:25:29 PST 2015


Firefox's engine has an ES4-era prototype `let` implementation, a bug to 
fix by implementing ES6 semantics.

https://bugzilla.mozilla.org/show_bug.cgi?id=950547

/be

Francisco Tolmasky wrote:
> Apologies as I believe this has been discussed before ( 
> https://esdiscuss.org/topic/block-scope-direct-non-strict-eval ), but 
> just trying to get some clarification as to the current state of 
> things, and have not been able to find this information (in a format I 
> can understand). Namely, I’m curious whether eval(“let x = 5”) adds x 
> to the current scope, if not in strict mode, at the “top level” (i.e. 
> not in a function) and
> called directly. My impression was that with let it should not be 
> adding anything to the current scope, but my tests in Mozilla Firefox 
> (in the console) seem to suggest they do:
>
> > eval(“let x = 5”)
> > undefined
> > x
> > 5
>
> In fact, even in functions:
>
> > (function() { eval("let xyz = 555"); console.log(xyz) })()
> > 555
>
> In if statements, it seems to be tacked onto the global scope:
>
> > if (true) { eval(“let x = 5”) } x
> > 5
>
> If these are just bugs that’s fine, but if not, could someone tell me 
> the expected behavior? Is it always supposed to act as if its creating 
> a new scope for the blocks, or always *except* for top level evals? Or 
> never?
>
> Thanks,
>
> Francisco
>
> -- 
> Francisco Tolmasky
> www.tolmasky.com <http://www.tolmasky.com>
> tolmasky at gmail.com <mailto:tolmasky at gmail.com>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss


More information about the es-discuss mailing list