JavaScript:浏览器支持vs纯语言支持:setTimeout、setInterval

JavaScript:浏览器支持vs纯语言支持:setTimeout、setInterval,javascript,node.js,settimeout,v8,Javascript,Node.js,Settimeout,V8,JavaScript只是一种语言,它的实现之一就是V8引擎。它在chrome和node.js中都使用 DOM支持不是JavaScript语言功能,而是浏览器功能(纯JS中没有DOM)。同样,XMLHttpRequest也不是JavaScript的一部分。它是JS语言的浏览器插件 我的问题与谈话有关,他说,setTimeout不在V8中。我想他可能错了,但我不确定,这是我的问题 当我打开node.js(基于V8)控制台并键入以下内容时: > Promise [Function: Promis

JavaScript只是一种语言,它的实现之一就是
V8
引擎。它在chrome和node.js中都使用

DOM
支持不是JavaScript语言功能,而是浏览器功能(纯JS中没有
DOM
)。同样,
XMLHttpRequest
也不是JavaScript的一部分。它是JS语言的浏览器插件

我的问题与谈话有关,他说,
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)
承诺 [功能:承诺] >设置超时 [功能] >设定间隔 [功能] >XMLHttpRequest ReferenceError:未定义XMLHttpRequest 回复:1:1 在REPLServer.defaultEval(repl.js:262:27) 绑定时(domain.js:287:14) 在REPLServer.runBound[as eval](domain.js:300:12) 在服务器上。(回复js:431:12) 在emitOne(events.js:82:20) 在REPLServer.emit上(events.js:169:7) 在REPLServer.Interface.\u在线(readline.js:211:10) 在REPLServer.Interface.\u行(readline.js:550:8) 在REPLServer.Interface.\u ttyWrite(readline.js:827:14) 我看到:

  • Promise
    prototype已经存在,因为它是ES6的一部分,已经在node的新版本下可用。作为一种语言,它是JS的一部分
  • XMLHttpRequest
    不存在,因为它只在浏览器中可用,它不是语言的一部分
  • 都有
    setTimeout
    setInterval
    。Philip Roberts说它们不是,但我在node.js下看到了它们,我认为它们应该是,因为
    setTimeout
    /
    setInterval
    在单线程/异步环境中是有意义的,无论它是浏览器还是服务器
我想他知道他在说什么,但我想知道为什么:)


编辑:


我看到
setTimeout
window
对象上的一个函数。基本上,
window
是非标准的东西。

他说得对,它们不是V8的一部分。但是,它们是(通过模块,默认情况下包括在内),并且其设计方式与浏览器规范兼容:

计时器模块公开了一个全局API,用于调度在未来某个时间段调用的函数。因为计时器函数是全局函数,所以不需要调用require('timers')来使用API

Node.js中的计时器函数实现了与Web浏览器提供的计时器API类似的API,但使用了围绕Node.js事件循环构建的不同内部实现


他说得对,他们不是V8的一部分。但是,它们是(通过模块,默认情况下包括在内),并且其设计方式与浏览器规范兼容:

计时器模块公开了一个全局API,用于调度在未来某个时间段调用的函数。因为计时器函数是全局函数,所以不需要调用require('timers')来使用API

Node.js中的计时器函数实现了与Web浏览器提供的计时器API类似的API,但使用了围绕Node.js事件循环构建的不同内部实现