1

グローバル名前空間から隠したいいくつかのカスタムオブジェクトと関数を作成しています(アクセス可能性の制限を含む)。

document.ready関数内に配置すると、Closureに配置するのと同じ効果がありますか、それとも、カスタムコードがグローバル名前空間から外れるように、document.ready宣言でjquery参照のエイリアスを作成する必要がありますか?

オプション1.プレーンドキュメント対応

$(document).ready(function()
   //do custom stuff

オプション2:ドキュメント内のクロージャの準備ができました

  $(document).ready(function(){
       (function($) {
         //do custom stuff
       })(jQuery);

オプション3:ドキュメントレディのjquery参照をエイリアスする

jquery(document).ready(function($) { 
    //do custom stuff

推奨されるオプションは何ですか?ありがとう

4

3 に答える 3

3

ECMAscriptのすべての関数は、事実上クロージャであることを理解する必要があります。したがって、特定のスニペットでは実際には何の違いもありません。このスニペットでは、(他のコンテキストからのアクセシビリティに加えて)これらの変数を作成する関数(-context)があります。

于 2012-08-02T10:11:00.393 に答える
2

関数内で変数を宣言すると、それらはその関数でのみ表示されます。

$また、スコープが正しいことを確認するために、オプション3を選択します(ただし、関数名をからjqueryに修正しますjQuery)。$オプション1と2はすでにそれが正しいエイリアスであると想定していますが、オプション3は$、外部スコープがと同じでなくても機能しますjQuery(たとえば、jQuery.noConflict()呼び出された場合、またはPrototype.jsなどの別のライブラリがロードされた場合)が、$常に意味がありますjQueryあなたがいるあなたの内側のスコープで//do custom stuff

于 2012-08-02T10:10:07.633 に答える
1

JavaScriptでは、すべての関数に独自のスコープがあり、関数内で宣言したオブジェクトまたは変数は、関数自体または関数内で宣言された他の関数によってのみ表示されます。

名前空間を作成する最も一般的な方法は、2番目のオプションのように、定義後に自動的に呼び出され、データを含むオブジェクトを返す関数を作成することです。その後、そのオブジェクトを介してすべてのデータにアクセスできます。いずれにせよ、コードの他の部分から変数を非表示にしたい場合は、関数を作成し、その中に非表示にするすべてのものを宣言するだけです。

于 2012-08-02T10:24:24.480 に答える