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 the “ooops” variable is defined is 
the global scope. At runtime, we just need to do “globalScope.get(‘oops’)" to 
retreive the value (or throw). In non-strict ES, the “t” function may be eval, 
and eval could add a “oops” variable in the parent function getOoops. So, we 
don’t know at compilation if “ooops” belong the the global scope of from the 
function’s scope (we can only find that out at runtime).



From: Šime Vidas 
Sent: Wednesday, October 03, 2012 6:41 PM
To: es-discuss@mozilla.org 
Subject: Is ES5 Strict a fully statically scoped language?
In the talk "Changes to JavaScript, Part 1: EcmaScript 5", Mark Miller states 
that ES5 Default contains four static scope violations (direct link: 
http://www.youtube.com/watch?v=Kq4FpMe6cRs&t=42m53s). He also states that ES5 
Strict corrects these violations, making ES5 Strict is a statically scoped 
language. I don't understand how that can be true, since it is possible to 
dynamically add bindings to the global environment by creating new global 
properties (during code evaluation). Isn't this a static scope violation, too?

-- Šime Vidas



--------------------------------------------------------------------------------
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to