2012-02-21 3 views
7

私はいくつかのスクリプトが特定のページの他のスクリプトの前に呼び出されるように見えた、私はスクリプトが読み込まれる特定の順序は何ですか?参照先の.jsスクリプトのページはめ込みですか?それらは最初に<script>からページ順に実行されていますか、またはこのブラウザに依存していますか?特定のスクリプトがページ内で最初に実行されることを確認するにはどうすればよいですか?Javascriptスクリプトが最初に実行されていることを確認しますか?

答えて

4

特定の ページのスクリプトよりも先に呼び出されるスクリプトがあるようです。私はスクリプトが読み込まれる特定の順序はなんですか?

これは、彼らの言語仕様にW3Cによって設定されています。 HTML 4.01 Specificationの場合、たとえば、Section 18.2.4 Dynamic modification of documents, item 1で定義されています。インページの前にスクリプトの.js参照

上記を参照してください。いいえ。インラインスクリプトとリンクスクリプトは同じように扱われます。

最初に言及したページから最後にページの最後まで実行されますか? ですか、このブラウザに依存しますか?

この仕様では、上から下に順番に実行する必要があります。仕様に従って言語を実装するブラウザを見つける必要があります。私はSCRIPTタグを別の方法で扱っているとは思えませんが、可能です。

もう1つ考慮すべきことは、「実行」の定義です。セマンティック解析のように聞こえるかもしれませんが、そうではありません。 JavaScriptは、他のプログラミング言語と同様に、それ自体が標準に従って動作するように設計されています。 JavaScriptは、ECMA-262 5.1 Edition/June 2011 standardで指定され、第7章字句規則の左から右へ評価されます。 (行末は、次の行の一番左の文字として扱われます。)また、WHILEやFOR文など、文やその他の演算が評価される順序の規則も提供されています。

特定のスクリプトがページ内で最初に実行されることを確認する方法を教えてください。

(1)上部に置き、(2)言語仕様を実装するブラウザを選択します。

しかし、私はこの質問の背後に何かがあるかもしれないと感じています。予期しないコードの実行を停止しようとしている場合は、ONLOADイベントハンドラがページの完了を登録するまで、予期しないコードをブロックする必要があります。 (関数内に操作を囲むか、ブール値フラグをチェックするためにIFで囲みます。つまり、isLoadedはONLOADによってtrueに設定されます)。次に、ONLOADイベントハンドラが起動すると、インスタンス化されていないDOMオブジェクトのようなものについては心配する必要があります。

9

スクリプトが動的にロードされたり非同期または遅延としてマークされていない限り、スクリプトはページ内で発生した順序で実行または評価されます。したがって、最初に実行されたスクリプトが最初に実行されます。ロードされなければならない

アン外部参照スクリプトファイルには、その外部参照ファイルがロードされ、解析され、実行されるまで、すべてのさらなるJavaScriptの実行を待つことになります。

したがって、通常の(非非同期、非延期)のJavaScriptの評価順序は、それがページに遭遇するため、100%の確定です。デフォルトでは

+0

ECMA-262エディション5+からの参照を提供してください。このリファレンスは、規格に従って指定された動作です。すべてのブラウザとプラットフォームでこのように動作していると確信していますか? – ingyhere

+0

@ingyhere - 参照がどこにあるのかわかりませんが、今見たい時間がありません。これはWAYのjavascriptの動作です - あなたはそれに挑戦する何らかの理由があるなら、その理由を述べてください。 Javascriptはトップ/ダウンから実行されます。ブラウザ間で一貫性を持たなければならず、多くのページが壊れてしまうのは、常にトップからボトムまで実行しているJavaScriptに頼っているからです。ほとんどの言語は、ロジックの作業をするためにしばしば必要となるため、コードの異なる部分間で保証された実行順序を提供する必要があります。 – jfriend00

+0

ここに1つのリファレンスがあります:http://docstore.mik.ua/orelly/webprog/jscript/ch12_03.htm – jfriend00

5

scriptタグがダウンロードされ、それらがHTML文書に遭遇しているよう順番に評価されます。

asyncまたはdefer属性を使用すると、スクリプトのダウンロードが完了した後(async)またはページのロードが完了した後(延期)に実行されます。

+0

解析後まで* defer *属性の実行を停止しないでください(そうしないと、loadイベントとreadyイベントの代わりになります)。 HTML 4では、[defer](http://www.w3.org/TR/html401/interact/scripts.html#adef-defer)は、スクリプトがコンテンツを作成していないというヒントであったため、ブラウザは継続して読み込むことができましたそれを実行しながら。 HTML5では、[defer](http://www.w3.org/TR/html5/scripting-1.html#attr-script-defer)は「解析が完了するまで待つ」という意味です。 HTML5は、指定された振る舞いに依存することが十分にサポートされていません。 – RobG

1

スクリプトは、上から見たときと同じように、htmlファイルで評価された順に実行されます。

ただし、asyncとdeferは、実装されているブラウザでこれを無効にできます。

関連する問題