"use strict" VS setTimeout

Andrea Giammarchi andrea.giammarchi at gmail.com
Sun Sep 7 11:14:38 PDT 2014


It feels to me also a vector that will happily pass all linters and code
analyzers giving users a door to reach native context and start playing in
there with everything else. I'm pretty sure you would agree on this too :)

Please let us know if there's any follow up, it's probably easier/faster if
some googler mention this issue to other googlers that are collaborating
with WHATWG or W3C or both (or none)

Thanks

On Sun, Sep 7, 2014 at 7:11 PM, Mark Miller <erights at gmail.com> wrote:

> On Sun, Sep 7, 2014 at 11:07 AM, Andrea Giammarchi <
> andrea.giammarchi at gmail.com> wrote:
>
>> Yes Axel, that's how it works, this will show undefined indeed all over
>>
>> ```js
>> (function () {
>>   'use strict';
>>   function g() {
>>     console.log(this);
>>   }
>>   g(); // undefined
>>   setTimeout(function () {
>>     g(); // undefined
>>   }, 0);
>> }());
>> ```
>>
>> or testing other use strict restrictions:
>>
>> ```js
>> (function () {
>>   'use strict';
>>   setTimeout(function () {
>>     argument.callee
>>   }, 0);
>> }());
>> ```
>>
>> The strict behavior is preserved, it's not an opt-out, but the invoked
>> function within setTimeout has the global context regardless it has been
>> defined under the strict directive + regardless it defines itself as strict.
>>
>> Basically if you feel secure about "use strict" here you have a case that
>> shows you shouldn't ... making one point of strict directive kinda
>> broken/pointless.
>>
>
> Agreed. I would remove only "kinda" from that statement ;).
>
>
>
>>
>> Regards
>>
>>
>> On Sun, Sep 7, 2014 at 7:02 PM, Axel Rauschmayer <axel at rauschma.de>
>> wrote:
>>
>>> On Sep 7, 2014, at 19:47 , Mark S. Miller <erights at google.com> wrote:
>>>
>>> On Sun, Sep 7, 2014 at 10:36 AM, Mathias Bynens <mathiasb at opera.com>
>>> wrote:
>>>
>>>> On Sun, Sep 7, 2014 at 7:29 PM, Andrea Giammarchi
>>>> <andrea.giammarchi at gmail.com> wrote:
>>>> > This looks like a potential problem when possible passed methods are
>>>> not
>>>> > bound + it looks inconsistent with *"use strict"* expectations.
>>>>
>>>
>>> Yes. This looks like a typical screwup. Thanks for pointing it out.
>>>
>>>
>>> Interesting. Follow-up question: isn’t strictness propagated lexically?
>>> That is, shouldn’t the parameter of `setTimeout()` be strict even without
>>> being explicitly declared as such?
>>>
>>
>
> --
>
>   Cheers,
>   --MarkM
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140907/b63c78ef/attachment.html>


More information about the es-discuss mailing list