<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body dir="auto">
<div><br>
</div>
<div><br>
On Sep 7, 2014, at 19:54, "Andrea Giammarchi" <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div><br>
</div>
<div>But here I go back to the utopia I've already mentioned on putting everyone together to fix this, and I'm fine if it won't change but it's good to know that "use strict" could implicitly fail when the DOM is involved.</div>
</div>
</blockquote>
<div><br>
</div>
To be clear, "use strict" is not failing; it's not like the DOM APIs are doing anything against the JS spec. That is, I wouldn't say that `function f(g) { g.call({}); }` makes "use strict" fail.
<div><br>
</div>
<div>As for knowing that sometimes DOM APIs call passed-in functions with a thisArg, you should probably already be used to that from addEventListener.</div>
<div><br>
<blockquote type="cite">
<div dir="ltr">
<div><br>
</div>
<div>Regards</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sun, Sep 7, 2014 at 7:27 PM, Domenic Denicola <span dir="ltr">
<<a href="mailto:domenic@domenicdenicola.com" target="_blank">domenic@domenicdenicola.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div>
<div style="font-family:Calibri,sans-serif;font-size:11pt">I don't understand why this is any more surprising than any other function that calls its callback with .call(something). It doesn't matter whether the callback is strict or not; .call(window), which
 is what the spec does, will override it.<br>
<br>
As far as I can see this issue has absolutely nothing to do with strict vs. sloppy.</div>
</div>
<div dir="ltr">
<hr>
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">From:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt"><a href="mailto:andrea.giammarchi@gmail.com" target="_blank">Andrea Giammarchi</a></span><br>
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">Sent:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt">‎2014-‎09-‎07 19:14</span><br>
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">To: </span>
<span style="font-family:Calibri,sans-serif;font-size:11pt"><a href="mailto:erights@gmail.com" target="_blank">Mark Miller</a></span><br>
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">Cc: </span>
<span style="font-family:Calibri,sans-serif;font-size:11pt"><a href="mailto:erights@google.com" target="_blank">Mark S. Miller</a>;
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss list</a></span><br>
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">Subject:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt">Re: "use strict" VS setTimeout</span><br>
<br>
</div>
<div>
<div class="h5">
<div>
<div dir="ltr">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 :)
<div><br>
</div>
<div>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)</div>
<div><br>
</div>
<div>Thanks</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sun, Sep 7, 2014 at 7:11 PM, Mark Miller <span dir="ltr">
<<a href="mailto:erights@gmail.com" target="_blank">erights@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote"><span>On Sun, Sep 7, 2014 at 11:07 AM, Andrea Giammarchi
<span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Yes Axel, that's how it works, this will show undefined indeed all over
<div><br>
</div>
<div>```js</div>
<div>
<div>(function () {</div>
<div>  'use strict';</div>
<div>  function g() {</div>
<div>    console.log(this);</div>
<div>  }</div>
<div>  g(); // undefined</div>
<div>  setTimeout(function () {</div>
<div>    g(); // undefined</div>
<div>  }, 0);</div>
<div>}());</div>
</div>
<div>```</div>
<div><br>
</div>
<div>or testing other use strict restrictions:</div>
<div><br>
</div>
<div>```js</div>
<div><span>
<div>(function () {</div>
<div>  'use strict';</div>
<div>  setTimeout(function () {</div>
</span>
<div>    argument.callee</div>
<div>  }, 0);</div>
<div>}());</div>
</div>
<div>```</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
</div>
</blockquote>
<div><br>
</div>
</span>
<div>Agreed. I would remove only "kinda" from that statement ;).</div>
<span>
<div><br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div><br>
</div>
<div>Regards</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">
<div>
<div>On Sun, Sep 7, 2014 at 7:02 PM, Axel Rauschmayer <span dir="ltr"><<a href="mailto:axel@rauschma.de" target="_blank">axel@rauschma.de</a>></span> wrote:<br>
</div>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div>
<div style="word-wrap:break-word"><span>On Sep 7, 2014, at 19:47 , Mark S. Miller <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>> wrote:<br>
</span>
<div><span><br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Sun, Sep 7, 2014 at 10:36 AM, Mathias Bynens <span dir="ltr">
<<a href="mailto:mathiasb@opera.com" target="_blank">mathiasb@opera.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span>On Sun, Sep 7, 2014 at 7:29 PM, Andrea Giammarchi<br>
<<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br>
> This looks like a potential problem when possible passed methods are not<br>
> bound + it looks inconsistent with *"use strict"* expectations.<br>
</span></blockquote>
<div><br>
</div>
<div>Yes. This looks like a typical screwup. Thanks for pointing it out.</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
</span>
<div>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?</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</span></div>
<span><font color="#888888"><br clear="all">
<div><br>
</div>
-- <br>
<br>
  Cheers,<br>
  --MarkM </font></span></div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
</div>
</body>
</html>