"use strict" VS setTimeout

Mark Miller erights at gmail.com
Sun Sep 7 11:11:16 PDT 2014


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/b661f7b2/attachment-0001.html>


More information about the es-discuss mailing list