2009-08-24 11 views
2

jquery $()。ready();の中からjavascriptコードを呼び出している限り、関数は、私のJavaScriptコードで宣言されたすべての変数にアクセスできないはずですか?ページ内のjavascriptの順序は重要ですか?

私はコードが.jsファイルとインラインから来ています。

私は変数にアクセスしようとしましたが、定義されていないと言いますが、私がビューソースを行うと、その変数を見ることができます。

+0

ここをチェックしてください。多くのことを説明する回答がありますhttp://stackoverflow.com/questions/7609276/javascript-function-order-why-does-it-matter – iveetoo

答えて

4

必ずしも変数にアクセスする必要はありません。実際には、変数のスコープと、その変数が使用されている場所に応じて定義されます。変数が別のready()ブロックで定義されている場合、参照可能なブロックの後に実行可能ブロックが実行されていれば、その変数がグローバル・スペースにあってもその変数にアクセスすることはできません。利用できるようにするには、変数を定義するコードを参照するコードの前に実行する必要があり、同じスコープにする必要があります。

+0

+1詳細:http://docs.jquery.com/Events /準備完了#fn – ATorras

0

はい、すべてのトップレベル変数にアクセスできます。しかし、あなたが探しているものは、ハンドラがあなたの後で実行されることができるウィンドウ変数であっても、dom readyイベントを使っても定義できます。 JavaScriptファイル内に動的に挿入されています。

1

いいえ、必要な順番で常にJavaScriptを読み込む必要があります。いくつかのjQueryプラグインを使用している場合は、それらのプラグインの前にjQueryをロードする必要があります。これは、あなたが知らないうちにjQueryオブジェクトを使用するものをインスタンス化する可能性があります。私のWebアプリケーションでは

は、私は次の順序でJavaScriptを読み込む:

  • 外部ライブラリ(jQueryの、プロトタイプ、ExtJSの)これらのライブラリのオフに構築
  • プラグインを
  • マイカスタムのJavaScript

私の回答が役に立ちましたと思います。

1

他のファイルの変数にアクセスすることは問題ありません。スコープや単純なタイプミスに問題がある可能性があります。アクセスしようとしている変数はどのスコープで、どのスコープでそれを使用しようとしていますか?

4

JavaScriptの順序は本当に重要です。 Javascriptがページ内に直線的に実行されるので、あなたがこのような2個の<script>のタグを持っている場合:

<script src="test1.js"></script> 
<script src="test2.js"></script> 

test1.jsはその後test2.js、ロードされ、最初に実行されます。 test1.jsでグローバルに宣言されたものは、2番目のスクリプトではアクセスできますが、それ以外の方法ではアクセスできません。

この副作用は、スクリプトもブロックそれらがロードされたときに、そのtest1.jsをロードするのに長い時間がかかった場合、あなたはそれがページの読み込み時間を遅く見るだろうということです。このため、すぐには必要ないjavascriptをページの下部に配置することをお勧めします。そうすれば、JavaScriptの読み込みが遅くなる前にほとんどすべてが表示されます。

jqueryの "on ready"イベントの中には、理論的にDOMの一部としてロードされたものにアクセスする必要があります。これは、DOM構造が完全に構築される前に技術的には起動しないはずです。

0

ページのどの部分にも変数値を設定できますが、機能コードの前にページの上部に変数値を宣言する方が簡単です。

Josh

関連する問題