Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread François REMY
I think that what he meant is that we know for sure in which scope we can find the property/variable. That the propery exists or not in the that scope is another issue. So, in the code “function getOoops(t) { t(); return function() { return ooops; } }” we know statically that the scope where

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Gavin Barraclough
On Oct 3, 2012, at 10:05 AM, François REMY wrote: In non-strict ES, the “t” function may be eval, and eval could add a “oops” variable in the parent function getOoops. I don't believe this is true. This does not constitute a direct call to eval (15.1.2.1.1), and as such the eval will take

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread François REMY
Indirect eval is something introduced for ES5 Strict only, I believe. Try the following code in your browser’s console, and you may be surprised: ((function(t) { t(var body=true); return function() { return body; }; })(eval))()) ___ es-discuss

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Gavin Barraclough
On Oct 3, 2012, at 12:40 PM, François REMY wrote: Indirect eval is something introduced for ES5 Strict only, I believe. Nope. See 15.1.2.1.1, no reference to strict. Here's a better example: (function(t){ var x = 'foo'; t(x = 'bar'); alert(x); })(eval) The indirect eval does not

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread François REMY
| That just puts 'body' on the window. Indee, I'm false on that one. But if you use a direct eval, you can get the same behavior in ES5, which is want I wanted to demonstrate: window.a = true; (function x(t) { eval(t); return a==window.a; })(var a=false) So in plain ES5, the scope of

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Mark S. Miller
On Wed, Oct 3, 2012 at 10:05 AM, François REMY fremycompany_...@yahoo.frwrote: I think that what he meant is that we know for sure in which scope we can find the property/variable. That the propery exists or not in the that scope is another issue. So, in the code “function getOoops(t) {

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Šime Vidas
On Wed, Oct 3, 2012 at 7:05 PM, François REMY fremycompany_...@yahoo.frwrote: I think that what he meant is that we know for sure in which scope we can find the property/variable. That the propery exists or not in the that scope is another issue. So, it doesn't matter that the global

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Mark S. Miller
On Wed, Oct 3, 2012 at 3:16 PM, Šime Vidas sime.vi...@gmail.com wrote: On Wed, Oct 3, 2012 at 7:05 PM, François REMY fremycompany_...@yahoo.frwrote: I think that what he meant is that we know for sure in which scope we can find the property/variable. That the propery exists or not in the

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Šime Vidas
On Thu, Oct 4, 2012 at 12:31 AM, Mark S. Miller erig...@google.com wrote: On Wed, Oct 3, 2012 at 3:16 PM, Šime Vidas sime.vi...@gmail.com wrote: On Wed, Oct 3, 2012 at 7:05 PM, François REMY fremycompany_...@yahoo.frwrote: I think that what he meant is that we know for sure in which

Re: Is ES5 Strict a fully statically scoped language?

2012-10-03 Thread Brendan Eich
You should eval an initialized var declaration of foo inside the with, and check foo's value after the with body, for real head-exploding. ;-) /be Šime Vidas wrote: Well, thank you for your excellent video. The dynamic scopes in the default language are a disaster... I've just written a short