- From: Cameron McCormack <cam@mcc.id.au>
- Date: Thu, 7 Jul 2011 11:35:46 +1200
- To: "Mark S. Miller" <erights@google.com>
- Cc: Boris Zbarsky <bzbarsky@mit.edu>, Allen Wirfs-Brock <allen@wirfs-brock.com>, Luke Hoban <lukeh@microsoft.com>, "es5-discuss@mozilla.org" <es5-discuss@mozilla.org>, public-script-coord@w3.org
Mark S. Miller:
> Then
>
> (1,setTimeout)(function(){'use strict'; alert('foo'); }, 0)
>
> should throw a TypeError on all browsers. I think the bug is in this part of
> WebIDL, but this something we could argue about. There is definitely a bug
> somewhere.
I did some testing recently and found that all major browsers throw when
given a random this object:
http://people.mozilla.org/~cmccormack/tests/settimeout-this.html
but I didn’t test it with undefined as the this value.
Adding that to the test:
http://people.mozilla.org/~cmccormack/tests/settimeout-this-2.html
I find that setTimeout.call(undefined) works in Firefox/Chrome/Safari/
Opera but not in IE. It looks like no implementation implements the ES5
requirement that
(function() { return this }).call(undefined)
return undefined. Did I test that correctly? (Maybe IE is doing
something different for native Functions and setTimeout.)
> Proposal: I think WebIDL should distinguish between methods sensitive to
> their this-binding and functions which are not. I think setTimeout should be
> classified as a function not sensitive to its this-binding.
I doubt authors are doing setTimeout.call(undefined). However, they
probably are doing bare setTimeout() calls in strict mode.
--
Cameron McCormack ≝ http://mcc.id.au/
Received on Wednesday, 6 July 2011 23:36:36 UTC