2012-03-30 3 views
10

、JSエンジン実行FIFO内のタスクをキューいくつかのトリガーがありますJohn Resig - How JavaScript Timers WorkIs JavaScript guaranteed to be single-threaded?JavaScriptコードの実行をトリガするのは何ですか?あなたは私が話しているかわからない場合は

お読みください。これは標準の一部ではないので、私はこれらのトリガーの驚異的なリストを探しています。 (私はそれがすべてスクリプトのロードイベントまたはタイマーイベントのように、内部のイベントハンドラに帰着が、私はむしろ、エンジンの内部を無視して、ユーザの視点から物事を見てみたいと思います。)

ので、これまで私は(document.writeに追加されたものを含め)初期の文書で

  • <script>要素*実行時にJSによって挿入
  • <script>要素*
  • イベントhandlを同定していますERS
    - これらは/ブラウザのみで)、そのようなユーザインタラクション、エラーイベント、ウェブワーカーメッセージやAjaxのコールバック...
  • window.setTimeout
  • window.setInterval

*として例多種多様を含み、 DOM環境

これ以上ですか? JSエンジンの違いは?

+0

window.setTimeoutとwindow.setIntervalに似ていますが、次回ディスプレイが更新されたときに関数をトリガーしようとするwindow.requestAnimationFrameがあります(通常1/60秒) – jcmiller11

+1

'setTimeout() 'と' setInterval() 'はイベントハンドラと一緒に使用されます。基本的に、イベントハンドラとスクリプト読み込みの2つしかありません。 – slebetman

答えて

1

"JavaScript"は実際にはあまりにも広く使用されるべきではありません。

ECMAScriptは、あなたが参照しているものです。 ECMAScriptの情報はhttp://www.ecmascript.org/ です。言語標準はECMA-262と呼ばれ、ほとんどのブラウザで5.1版がサポートされています。

のsetTimeout、たsetInterval、DOMイベント、そしてより多くの言語の一部ではありません。これらは、ホスト環境としてホスト・オブジェクトとして提供されます。広範囲のホスト環境用のECMAScriptの作成は、ホストオブジェクトを使用するときに特に注意する必要があります。

ECMAScriptのコードは、実行コンテキスト内で実行されます。これはスタックの形式をとり、現在の実行コンテキストの状態を先頭に保持します。

実行コンテキストをプッシュする3つの方法があります。グローバルコード、評価、関数。これがコードを開始する唯一の方法です。ホスト環境は、これらのメソッドを使用してコードを実行します。

ホスト環境はコールスタックを提供できます。これは、独立したスレッドで動作するホストオブジェクトによって生成された関数呼び出しをスタックするために使用されます。通常、setTimeoutなどのイベントは、コールスタックに関数を追加します。ホスト環境は、実行コンテキストスタックが空になるまで待ってから、コールスタックから関数をポップし、新しい実行コンテキストを作成し、完了するまでコードを実行します。コールスタックが空になるまで、これを繰り返します。ホストオブジェクトの実行コンテキストマネージャの包括的なリストを構築しようとすると

は無益です。

質問に答えるには

これ以上ですか? はい、もっとたくさんあります。これはこの答えの範囲外です。使用する特定のホスト環境を参照してください。

JSエンジンの違いはありますか? (ECMAScriptホスト環境)。 はい。この答えの範囲を超え、ホストに依存する

数多くのホスト環境があり、常に新しい環境が作成されています。新しい実行コンテキストの作成をトリガーするものは、ホスト環境に大きく依存します。

関連する問題