Is ES5 Strict a fully statically scoped language?

Šime Vidas sime.vidas at gmail.com
Wed Oct 3 15:16:18 PDT 2012


On Wed, Oct 3, 2012 at 7:05 PM, François REMY <fremycompany_pub at yahoo.fr>wrote:

>   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 environment is dynamic (as in
bindings can be added/removed dynamically), since it's the top-most
environment. Only the nested (function) environments must be static, and if
they are, i.e. if we know which bindings are defined in each function
environment (in the scope chain), then we can safely assume that a name
that doesn't exist in any of those function environments, can only either
be a global binding, or a name that doesn't exist in any environment. Did I
get this correctly?




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 <sime.vidas at gmail.com>
> *Sent:* Wednesday, October 03, 2012 6:41 PM
> *To:* es-discuss at 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 at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121004/7f1ad14e/attachment.html>


More information about the es-discuss mailing list