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.
Regards
On Sun, Sep 7, 2014 at 7:02 PM, Axel Rauschmayer <[email protected]> wrote:
> On Sep 7, 2014, at 19:47 , Mark S. Miller <[email protected]> wrote:
>
> On Sun, Sep 7, 2014 at 10:36 AM, Mathias Bynens <[email protected]>
> wrote:
>
>> On Sun, Sep 7, 2014 at 7:29 PM, Andrea Giammarchi
>> <[email protected]> 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?
>
> --
> Dr. Axel Rauschmayer
> [email protected]
> rauschma.de
>
>
>
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss