Andy Wingo <mailto:[email protected]>
January 31, 2012 9:07 AM
Summary: eval introduces a new block scope.
And there's a new var scope per direct eval call in strict code, per
ES5. Adding 'let' must not reintroduce the pre-strict crazy ;-).
(function (){let x = 20; eval("var x = 10"); return x;})()
10
Surely a SyntaxError, as the var x conflicts with the let x at the
function-level scope?
Oops, you're right. This is non-strict direct eval, so the var hoists
and collides with the 'let'. Thanks!
/be
Andy
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
Sam Tobin-Hochstadt <mailto:[email protected]>
January 31, 2012 8:27 AM
On Tue, Jan 31, 2012 at 9:30 AM, Andy Wingo<[email protected]> wrote:
Hello ecmascriptians,
I hear that TC39 wants to allow let and const into "classic mode". This
sounds like a bad idea to me, but, ok.
Instead, I would say that TC39 wants to eliminate the concept of "classic mode".
If so, can someone say what these expressions would evaluate to, or the
errors they would raise:
I don't think we've talked about the behavior of direct |eval| on
statements with |let|, but here's what I would hope we'd do:
(function (){eval("let x = 10"); return x;})()
ReferenceError
(function (){var x = 20; eval("let x = 10"); return x;})()
(function (){let x = 20; eval("let x = 10"); return x;})()
(function (){let x = 20; { eval("let x = 10"); return x;}})()
(function (){ { let x = 20; { eval("let x = 10"); return x;}}})()
20
(function (){let x = 20; eval("var x = 10"); return x;})()
10
Andy Wingo <mailto:[email protected]>
January 31, 2012 6:30 AM
Hello ecmascriptians,
I hear that TC39 wants to allow let and const into "classic mode". This
sounds like a bad idea to me, but, ok.
If so, can someone say what these expressions would evaluate to, or the
errors they would raise:
(function (){eval("let x = 10"); return x;})()
(function (){var x = 20; eval("let x = 10"); return x;})()
(function (){let x = 20; eval("let x = 10"); return x;})()
(function (){let x = 20; { eval("let x = 10"); return x;}})()
(function (){let x = 20; eval("var x = 10"); return x;})()
(function (){ { let x = 20; { eval("let x = 10"); return x;}}})()
As Leibniz would have it, let us calculate.
Andy
_______________________________________________
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