Is ES5 Strict a fully statically scoped language?

Mark S. Miller erights at
Wed Oct 3 15:31:00 PDT 2012

On Wed, Oct 3, 2012 at 3:16 PM, Šime Vidas <sime.vidas at> wrote:

> On Wed, Oct 3, 2012 at 7:05 PM, François REMY <fremycompany_pub at>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?

Exactly correct. Thanks for the clarification!

> 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>
>> *Sent:* Wednesday, October 03, 2012 6:41 PM
>> *To:* es-discuss at
>> *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:
>> 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
> _______________________________________________
> es-discuss mailing list
> es-discuss at

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list