12

I had another question in SO about setTimeout(), where a user mentioned that if the function argument is a string it gets evaluated in global scope, other wise it's not. This was an eye-opener, so I tried to find more info about how setTimeout actually works, but it's not part of the EcmaScript spec and not even MDN had that specific of of information I found in SO.

Is there some good reference about how setTimeout() works?

Community
  • 1
  • 1
user967722
  • 1,213
  • 1
  • 20
  • 26
  • 2
    [Here](https://developer.mozilla.org/en/DOM/window.setTimeout) is the MDN page. – Pointy Jan 13 '12 at 14:43
  • 1
    In the HTML5 draft: http://dev.w3.org/html5/spec/Overview.html#timers – James Allardice Jan 13 '12 at 14:45
  • the MDN does have some useful info about it: "Code executed by setTimeout() is run in a separate execution context to the function from which it was called." – Matt K Jan 13 '12 at 14:50
  • 1
    @MattK: Yes, but the rest of that paragraph talks about `this`, which is different from scope. – T.J. Crowder Jan 13 '12 at 14:55
  • So if setTimeout and other similar API is not defined in ECMAscript, javascript itself should be synchronous language, right? can we say that? – Chris Bao Mar 21 '20 at 01:58

2 Answers2

16

setTimeout and such aren't in the ECMAScript specification because they're not JavaScript features. They're features of the browser environment's window object. Other environments (Windows Scripting Host, NodeJS, etc.) won't necessarily have those features.

The W3C has been trying to standardize the window object and its various features (including setTimeout), the latest is in the timers section of the HTML5 spec. A lot of it is codifying what browsers already do, although some of it (like saying that the minimum interval value must be 4 [milliseconds]) seems (to me) to be out-of-place for an API specification and implementations seem to make up their own minds (in tests, you can see current browsers happily doing a shorter interval, with the apparent exception of Opera which appears to do what the spec says).

T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875
  • Wow those HTML5 specs always make me seasick. But I hadn't thought about the situation with respect to web workers. – Pointy Jan 13 '12 at 14:52
  • I think that W3C Window Object spec is abandoned. HTML5 completely specifies the `window` object, or at least attempts to. – Tim Down Jan 13 '12 at 16:11
5

The setTimeout() method is a method on the window object. You can find the link to the MDN documentation below:

https://developer.mozilla.org/en/DOM/window.setTimeout

Phil Klein
  • 7,344
  • 3
  • 30
  • 33