質問

私は、独自のサイト上で働いている、と私はいくつかの問題を抱えています。したがって、この問題のあなたはjQueryのに名前空間の参照として$またはjQのを使用することができると仮定し、私はプロトタイプと一緒にjQueryを使用している、と私はそれが適切に名前空間持っています。

だから私はしましたが、いくつかのミックスのjQueryやJavaScript、いくつかの無地のJavaScript、jQueryの一部のみを機能の束を得ました。さて、現在、一部の機能がdocument.ready jQueryの関数内で定義され、いくつかの種類のこのようなの、それの外に定義されています:

jQ(document.ready(function($) {

  if ( ifConfig ) {
    //page check, function calls here
    fnc1();
    fnc2();
    fnc3();
    fnc4();
  }

  function fnc1() {
    //fnc code in here
  }
  function fnc2() {
    //fnc code in here
  }
});  //end document.ready

function fnc3() {
}
function fnc4() {
}

さて、これはすべての擬似コードである、あなたは、機能が有効であると仮定し、それらに有効なコードを持つことができます。最近、私はいくつかのデバッグをしていた、と宣言してdocument.ready内で呼ばれた私の機能の一つは、それが未定義たと述べました。私は外document.readyのそれを移動し、すべてが再び働いています。

私は基本的にあなたがdocument.ready内の関数を宣言しないとき、あなたは外でそれらを宣言しないとき、私の質問があるので、関数が、より良いと呼ば/開始する方法の順序を理解しようとしていますか?彼らはそれだけでdocument.ready内で呼び出さしているときにのみ、内部を宣言するのですか?それとも私は常にちょうどそのdocument.readyの外でそれらを宣言する必要がありますか?

感謝します。

役に立ちましたか?

解決

一般的に、あなたが宣言&(関数/メソッドを含む)は、アプリケーション・ロジックの全てが配置されている独自のnamespaceを定義する必要があります。あなたは+あなたのサイト上で他のスクリプトとcollisionを避けるためその方法は、その方法は、あなたのコードは非常にクリーンとmaintenaineに簡単です。

var myapp = function(){
    var foobar1 = null,
        foobar2 = null,
        foobar3 = null;

    return {
        getFoobar1:  function(){
           return foobar1;
        },
        getFoobar2:  function(){
           return foobar2;
        },
        setFoobar1:  function(foo){
           foobar1 = foo;
        },
        clickhandler: function(e){
           alert('I am an event handler, and I am not anonymous');
        }
        // etc.
    };
};

$(document).ready(function(){
    var Application = myapp();

    Application.getFoobar2();

    $(document).bind('click', Application.clickhandler);
});
そのパターン(いくつかのコールそれを「メソッドパターン」)も外部からgetter機能を通じてのみアクセス可能あなたの名前空間内のプライベートメンバ変数を、保証closured機能/オブジェクトを作成します。

これは本当に唯一のかなり基本的な例である、あなたは非常にいいと良いこと(IMO)である、拡張します。

に、このアイデア&パターンをプッシュすることができます

という名前と、かなり多くの場合、推奨されたこのようなものについての素晴らしい本は、「Javascriptを:良い部品」である。ダグラス・クロックフォードによる

他のヒント

関数は文書のみレディ機能の内部で使用されている場合は、グローバルスコープを汚染しないように、

、その後、内部のそれを宣言する。それ以外の場合は、スクリプトの残りの部分は、これらの機能へのアクセスを持っていることので外にそれを宣言します。

(ドキュメント).readyは、より多くの必要性は、ページの読み込み時に実行されることをもののために使用され、およびない関数宣言。あなたが内部の(ドキュメント).readyのそれらを宣言すると、その範囲は、そのブロックにローカルになります - 彼らは唯一の罰金と彼らはそこに宣言する必要があることを、ローカルで使用している場合。そうでない場合は、それらの外を宣言します。

関数はそのブロックのみに使用されている場合は、だからあなたの例では、彼らはそこに宣言する必要があります。彼らはさらに、他の場所を使用している場合、彼らは外に宣言する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top