Is ES5 Strict a fully statically scoped language?

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


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

> 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?
>

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 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
>>
>>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>


-- 
    Cheers,
    --MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121003/1a7fd763/attachment-0001.html>


More information about the es-discuss mailing list