2016-07-22 15 views
1

JavaScriptは単なる言語であり、実装の1つはV8エンジンです。これはchromeとnode.jsで使用されています。JavaScript:ブラウザのサポートと純粋な言語のサポート:setTimeout、setInterval

DOMサポートはJavaScript言語機能ではなく、ブラウザ機能(純粋なJSにはDOMはありません)です。同じように、XMLHttpRequestはJavaScriptの一部ではありません。これはJS言語のブラウザアドオンです。

私の質問は、彼が他の人の間では、setTimeoutはV8ではない、と述べてPhilip Roberts' JS conf EU話にも関します。私は彼が間違っているかもしれないと思いますが、私は確信が持てません。これが私の質問です。

私は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) 

を私がすることを参照してください。それはES6の一部なので、プロトタイプがある

  • Promise、すでにノードの新しいバージョンで利用可能です。言語
  • XMLHttpRequestはそれがブラウザでだけ利用可能なので、それは
  • setTimeoutsetInterval両方がある言語の一部ではない、がないように、それはJSの一部です。 Philip Robertsはそうではないと言いますが、node.jsとの下で利用できると私は確信しています。setTimeout/setIntervalは、ブラウザかサーバであろうと、シングルスレッド/非同期環境では意味があります。

私は彼が言っていることを知っていると思いますが、私は、なぜ:)


編集理解したい:私はsetTimeoutwindowオブジェクト上の関数であることがわかり

。基本的には、windowは非標準のものです。

答えて

4

彼はV8の一部ではないという点で彼は正しいです。彼らしかしpart of node.js(モジュールを経由して、デフォルトで含まれている)であり、それらは、ブラウザの仕様と互換性があるように設計されています:

タイマモジュールは、スケジューリングのための世界的なAPIを公開します将来のある時期に呼び出される関数です。タイマー関数はグローバルであるため、APIを使用するためにrequire( 'timer')を呼び出す必要はありません。

Node.js内のタイマー関数は、Webブラウザによって提供されるタイマーAPIと同様のAPIを実装しますが、Node.jsイベントループの周りに構築された別の内部実装を使用します。

関連する問題