すべてがdocument.ready(function(){});内にある必要がありますか?
はいといいえ。大規模なJavaScriptアプリケーションでは、メインコントローラーをこのイベントハンドラーからグローバルスコープに初期化します。ただし、DOMの準備が整うのを待つ必要のないコードがあります。具体的には、DOMに依存しないコードです。それはかなり簡単だと思います。たとえば、このイベントハンドラーの外部で、構成オブジェクトのクラスや関数などを宣言します。
document.ready(function(){});以外に何かがある理由はありますか?
確かに、理由は上で触れました。主に、DOMの相互作用を必要としないコードは、DOMの読み込みを待つべきではありません。特に、DOMの読み込みと非同期で実行できる場合(関数定義、構成オブジェクトなど)はそうです。
また、すべてのコードを1つのイベントハンドラーに含めないことで、物事をより整理し、コードをモジュール化したり、適切なデザインパターンを使用したりすることができます。
document.ready(function(){});内のコードです。外部コードからアクセスできませんか?
繰り返しますが、はい、いいえ。ローカルとして宣言すると、var
yesになります。これは、イベントハンドラーに対してローカルであるため、外部スコープからはアクセスできません。それ以外の場合は、グローバルスコープ内にあり、外部スコープにアクセスできます。ここに例があります(ここでホストされています: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()
に関する質問や議論を回避します。foo
global
編集:前の文で明確にしたと思いましたが、onclick
グローバルスコープとクロージャープロパティの間の混乱を避けるために意図的に使用されていますが、の使用を推奨していませんonlick
。 もちろん、それは悪い習慣であり、あなたはそれを使うべきではありません。