1

プログラム内のコードの順序に問題があります。今、私はそれの中にいくつかのものがdocument.ready(function() { } );あり、それの外にいくつかのものがあります。(コードを整理または改善するために)何かを移動するたびに、何かが壊れてしまうのは、宣言の順序またはアクセスレベルのいずれかが原因であると推測しています(つまり、外部のdocument.ready(function {});何かが内部の何かにアクセスできません。

誰かがJavaScriptの賢明な場所に物事を置くべきかについて何か洞察を持っていますか?

すべてが範囲内にあるべきdocument.ready(function() {});ですか?
外に何かを持っている理由はありますdocument.ready(function() {});か?
内のコードはdocument.ready(function() {});外部コードからアクセスできませんか?

4

2 に答える 2

3

1。すべてがdocument.ready(function(){});内にある必要がありますか?

いいえ、document.ready関数は、物事を初期化したり、イベントハンドラーを割り当てたりするためだけのものでなければならないと思います。

2。document.ready(function(){});以外に何かがある理由はありますか?

コードの再利用、およびより良いコード編成。

3。document.ready(function(){});内のコードです。外部コードからアクセスできませんか?

はい、document.readyで作成された変数とオブジェクトには、外部スコープからアクセスできません。

于 2009-08-05T06:41:32.663 に答える
0

すべてがdocument.ready(function(){});内にある必要がありますか?

はいといいえ。大規模なJavaScriptアプリケーションでは、メインコントローラーをこのイベントハンドラーからグローバルスコープに初期化します。ただし、DOMの準備が整うのを待つ必要のないコードがあります。具体的には、DOMに依存しないコードです。それはかなり簡単だと思います。たとえば、このイベントハンドラーの外部で、構成オブジェクトのクラスや関数などを宣言します。

document.ready(function(){});以外に何かがある理由はありますか?

確かに、理由は上で触れました。主に、DOMの相互作用を必要としないコードは、DOMの読み込みを待つべきではありません。特に、DOMの読み込みと非同期で実行できる場合(関数定義、構成オブジェクトなど)はそうです。

また、すべてのコードを1つのイベントハンドラーに含めないことで、物事をより整理し、コードをモジュール化したり、適切なデザインパターンを使用したりすることができます。

document.ready(function(){});内のコードです。外部コードからアクセスできませんか?

繰り返しますが、はい、いいえ。ローカルとして宣言すると、varyesになります。これは、イベントハンドラーに対してローカルであるため、外部スコープからはアクセスできません。それ以外の場合は、グローバルスコープ内にあり、外部スコープにアクセスできます。ここに例があります(ここでホストされています:http://jsbin.com/uriqe

JavaScript

var foo = function() {
  alert(global);
  return false;
}

$(document).ready(function() {
  global = "you can see me!?";
  alert("global is initiated");
});

HTML

<body>
  <p><a href="#" onclick="foo()">click me</a></p>
</body>

onclick目立たないメソッドではなく、イベントアタッチメントを意図的に使用して、クロージャープロパティを介したアクセス$(document).ready()に関する質問や議論を回避します。fooglobal

編集:前の文で明確にしたと思いましたが、onclickグローバルスコープとクロージャープロパティの間の混乱を避けるために意図的に使用されていますが、の使用を推奨していませんonlick もちろん、それは悪い習慣であり、あなたはそれを使うべきではありません。

于 2009-08-05T06:56:06.863 に答える