【问题标题】:setTimeout(): If not defined in EcmaScript spec, where can I learn how it works?setTimeout():如果没有在 EcmaScript 规范中定义,我在哪里可以了解它是如何工作的?
【发布时间】:2012-01-13 14:41:05
【问题描述】:

我有another question in SO about setTimeout(),其中一位用户提到如果函数参数是一个字符串,它将在全局范围内进行评估,否则它不是。这让我大开眼界,所以我试图找到更多关于 setTimeout 实际工作原理的信息,但它不是 EcmaScript 规范的一部分,甚至 MDN 也没有我在 SO 中找到的特定信息。

关于setTimeout() 的工作原理是否有一些好的参考资料?

【问题讨论】:

  • Here 是 MDN 页面。
  • MDN 确实有一些关于它的有用信息:“由 setTimeout() 执行的代码在与调用它的函数不同的执行上下文中运行。”
  • @MattK:是的,但是该段的其余部分讨论的是this,这与范围不同。
  • 那么如果ECMAscript中没有定义setTimeout等类似的API,那么javascript本身应该是同步语言吧?我们可以这么说吗?

标签: javascript settimeout


【解决方案1】:

setTimeout 等不在 ECMAScript 规范中,因为它们不是 JavaScript 功能。它们是浏览器环境的 window 对象的特征。其他环境(Windows Scripting Host、NodeJS 等)不一定具有这些功能。

W3C 一直在尝试标准化window 对象及其各种功能(包括setTimeout)、the latest is in the timers section of the HTML5 spec。其中很多都在编纂浏览器已经在做的事情,尽管其中一些(比如说最小间隔值必须是4 [毫秒])似乎(对我来说)对于 API 规范和实现来说是不合适的似乎已经下定决心(in tests,您可以看到当前的浏览器愉快地执行更短的间隔,除了 Opera,它似乎按照规范所说的那样做)。

【讨论】:

  • 哇,那些 HTML5 规范总是让我晕船。但我没有考虑过网络工作者的情况。
  • 我认为 W3C 窗口对象规范已被放弃。 HTML5 完全指定了 window 对象,或者至少尝试这样做。
  • 那个草稿有一半是“需要写这个”或“放什么?”对于 w3c 规范来说有点可笑。顺便说一句,您的最后一个链接已损坏。
  • @rvighne:这是一个草稿,草稿就是这样。我已经更新了链接(该草案完全失效了;正如 Tim 所说,它现在完全包含在 HTML5 规范中)。我确实希望他们这样做时至少会进行重定向。并不是说人们不依赖这些东西。
【解决方案2】:

setTimeout() 方法是window 对象上的一个方法。您可以在下面找到 MDN 文档的链接:

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

【讨论】:

  • 我刚刚更新了它,提到了用于评估字符串参数的范围。
猜你喜欢
  • 2021-04-07
  • 2019-01-03
  • 2020-03-11
  • 2013-01-23
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
相关资源
最近更新 更多