【发布时间】:2016-07-22 14:54:15
【问题描述】:
JavaScript 只是一种语言,它的一个实现是V8 引擎。它用于 chrome 以及 node.js。
DOM 支持不是 JavaScript 语言功能,而是浏览器功能(纯 JS 中没有 DOM)。同样,XMLHttpRequest 不是 JavaScript 的一部分。它是 JS 语言的浏览器插件。
我的问题与Philip Roberts' JS conf EU 谈话有关,他指出,其中,setTimeout 不在 V8 中。我认为他可能是错的,但我不确定,这是我的问题。
当我打开 node.js(基于 V8)控制台并输入以下内容时:
> Promise
[Function: Promise]
> setTimeout
[Function]
> setInterval
[Function]
> XMLHttpRequest
ReferenceError: XMLHttpRequest is not defined
at repl:1:1
at REPLServer.defaultEval (repl.js:262:27)
at bound (domain.js:287:14)
at REPLServer.runBound [as eval] (domain.js:300:12)
at REPLServer.<anonymous> (repl.js:431:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:211:10)
at REPLServer.Interface._line (readline.js:550:8)
at REPLServer.Interface._ttyWrite (readline.js:827:14)
我明白了:
-
Promise原型在那里,因为它是 ES6 的一部分,已经在新版本的节点下可用。它是 JS 作为一种语言的一部分 -
XMLHttpRequest不存在,因为它只是在浏览器中可用,它不是语言的一部分 -
setTimeout和setInterval都在那里。 Philip Roberts 说它们不是 - 但我看到它们在 node.js 下可用,我认为它们应该是,因为setTimeout/setInterval在单线程/异步环境中有意义,无论它是否是浏览器或服务器。
我猜他知道他在说什么,但我想知道为什么:)
编辑:
我看到setTimeout 是window 对象上的一个函数。基本上,window 是非标准的东西。
【问题讨论】:
标签: javascript node.js settimeout v8