0

私は別の質問を読んでいました、そして私はこれを見ました:

var basketModule = (function() {
var basket = []; //private

return { //exposed to public
       addItem: function(values) {
            basket.push(values);
        },
        getItemCount: function() {
            return basket.length;
        },
        getTotal: function(){
            var q = this.getItemCount(),p=0;
            while(q--){
                p+= basket[q].price;
            }
        return p;
        }
      }
}());

( and )彼が関数を'sでラップする理由を説明していただけますか?また、その目的は何returnですか?彼はただ書くself.addItem = ...などできませんでしたか?

4

4 に答える 4

2

関数を括弧で囲み、()その最後に追加すると、それは自己実行関数です。

(function() x() {
 //do something;
})();

そして、返すことによって、彼はbasket変数をいくらかプライベートにします。他の場所から取得してみてくださいbasketModule.basket。そうしないと、未定義になります。

于 2012-04-28T11:25:16.057 に答える
2

これはjavascriptモジュールパターンと呼ばれます。関数を定義し、それをすぐに呼び出して、変数がグローバルスペースに存在しないようにするか、関数名を定義します。

于 2012-04-28T11:27:05.543 に答える
0

最後の行の括弧に注意してください:()。関数が定義され、すぐに呼び出されます。 (function() { })();

return { ... }メソッドを持つオブジェクトを返しますaddItem

于 2012-04-28T11:26:12.220 に答える
0

このコードの目的は、3つのメソッドを使用してオブジェクトを作成することです。addItem、getItemCountおよびgetTotal。それらはすべて、バスケットによって表される状態に依存します。

バスケットがグローバルに定義されている場合、その状態が公開されます(変数バスケットは1つしか存在できません。どちらも問題が発生する可能性があるため、宣言全体をラップすることで、状態がカプセル化され、作成されたオブジェクトからのみアクセスできます。

同じことを達成する他の方法があり、賛否両論はスタイルとあなたが必要とするその特定のタイプのオブジェクトの数に関連しています。

解析されないため、ラッピングfunction(){}()が必要ですfunction(){}()

于 2012-04-28T11:30:11.857 に答える