On this very thread we are hashing out how eval("let x = ...") interacts
with the dynamic scope. I started advocating an ES5-like isolaed eval
lexical scope, and we could do that for let and const -- but var for
direct eval from non-strict code must affect the dynamic scope, same
with function in all likelihood (i.e., that's how eval("function
f(){...}") works now).
We already did the work in ES4/3.1 days, culminating in ES5, to
distinguish direct from indirect eval. Direct eval from strict code is
well-defined to have a fresh lexical scope in which to bind vars and
functions in the eval'ed source:
js> function f(s){"use strict"; eval(s); return g}
js> var g = "global";
js> f("function g(){}")
"global"
js> f("var g=42")
"global"
For strict direct eval, it follows that let and const must bind in the
fresh lexical scope created for eval. But direct eval from non-strict
code still faces the two choices Allen outlined.
Indirect eval is always non-strict and scoped only by the global scope.
/be
Claus Reinke <mailto:[email protected]>
January 31, 2012 1:05 PM
Btw, how does versioning work across eval? If I have a function body
with an eval in it, will the body/eval run as in ES5 or as in ES6?
Will that change if the body or the eval contain ES6 features? Will
ES5/ES6
scripts be able to eval ES6/ES5 code?
Claus
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
Brendan Eich <mailto:[email protected]>
January 31, 2012 10:23 AM
I bet the "mode" was what got Sam's attention (mine too) in your
"classic mode". We are not making hard mode walls or version opt-in.
No engine will have a mode enum that must be advanced (implicitly or
explicitly) and checked in order to tell what to do in unversioned
script. Or so we think!
/be
Andreas Rossberg <mailto:[email protected]>
January 31, 2012 10:20 AM
You mean as in: "extend" is the new "eliminate"?
I'm sorry, I couldn't resist...
/Andreas
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
Allen Wirfs-Brock <mailto:[email protected]>
January 31, 2012 9:40 AM
What we agreed to eliminate is the concept of a"classic mode" that
corresponds to unextended non-strict ES5. Both non-strict and strict
code in ES6 will include support for the extended ES6 language
features. In a few cases the semantics of extensions may differ
slightly between strict and non-strict code and a few extensions may
only be available for use by strict code
Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
Andreas Rossberg <mailto:[email protected]>
January 31, 2012 8:44 AM
What do you mean? I don't see how it can be eliminated, except by name
games.
/Andreas
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss