0

まとめているJQueryプラグインにいくつかの機能を提供するJavascriptライブラリを構築しようとしています。

オンラインで検索して次のスケルトンコードを取得しましたが、すべてがどのように機能するかはよくわかりません(クロージャであることはわかっています)。宣言を介して関数を追加しました。

(function(window, document, $) {

    function func_1(){
        return 1;
    }

    function func_2(){
        return 2;
    }

})(window, document, jQuery);

したがって、上記のコードを別のJSファイルに入れて、HTMLページでソースを作成し、次のように関数を実行してみます(注:JQueryも設定しています)。

<script type="text/javascript">
        $(document).ready(function() {
            console.log(func_1());
        });
</script>

ただし、Firebug(ReferenceError: func_1 is not defined)でエラーが発生しているようです。

2つの質問があります:

  1. 関数を呼び出すにはどうすればよいですか?!
  2. 次の形式で関数を呼び出せるようにしたいと思いますclassName.functionName()。これを実行できるようにスケルトンコードを再構築し、たとえば、次のように関数を呼び出すにはどうすればよいDevice.func_1()ですか?

期待される支援に感謝します。

4

3 に答える 3

2

クロージャーは、コードの残りの部分から内部関数を隠すために使用されます。ライブラリのパブリック関数を明示的に公開する必要があります。

var Device = (function(window, document, $) {
    function func_1(){
         return 1;
    }

    function func_2(){
        return 2;
    }

    var internalDevice = {
        func_1: func_1,
        func_2: func_2
    };
    return internalDevice; // expose functionality to the rest of the code
})(window, document, jQuery);

この(function(window, document, $) {})(window, document, jQuery);部分は、即時呼び出し関数式(IIFE)と呼ばれます。これは、すべてのライブラリ関数がグローバルスコープにリークするのを防ぐために使用されます。そうしないと、他のライブラリにfunc_1関数がある場合、そのライブラリが上書きされるか、ライブラリのが上書きされますfunc_1

関数の引数は、ライブラリがコードの他の部分にどのように影響し、それに依存するかを制御するために使用されます。たとえば、誰かがwindow。$ライブラリを上書きして、コード内のどこでも$が使用できなくなる可能性があります。ただし、クロージャーにはローカル参照があるため、引き続きアクセスできます。

上記のコード(オブジェクトを返す)を使用する代わりに、ライブラリをグローバルスコープに直接割り当てることもできます。

(function(window, document, $) {
    ...
    window.Device = internalDevice; // expose functionality to the rest of the code
})(window, document, jQuery);
于 2012-11-14T15:11:58.637 に答える
0

私は質問2にしか答えることができませんが、これを行うことでそれを作成できます。

var Device = {
function func_1()
{
// your first function
},
function func_2()
{
// your second function
}
};

そうすれば、次のように呼び出すことができます。

Device.func_1();

役立つホップ:)

于 2012-11-14T15:10:15.910 に答える
0

クロージャー内に何かがある場合、そのスコープはそのクロージャーに変更されます。func_1そして、func_2それらを呼び出す匿名関数内とそれ以下でのみ見ることができます。

于 2012-11-14T15:12:32.410 に答える