0

問題のコード:

(function(window){
    ps = {},
    ps = window.ps,
    ps.subscriptions = [],
    ps.subscribe = function(name, callback){
        ps.subscriptions.push({"name": name, "callback": callback});
        return [name,callback];
    },
    ps.unsubscribe = function(args){
        for(x=0;x<ps.subscriptions.length;x++){
            if(ps.subscriptions[x].name == args[0], ps.subscriptions[x].callback == args[1])
                ps.subscriptions.splice(x, 1);
        }
    },
    ps.publish = function(name, args){
        var temp = [];
        if(ps.subscriptions.length > 0){
            for(var x=0;x<ps.subscriptions.length;x++) {
                if(ps.subscriptions[x].name == name)
                    temp.push({"fn":ps.subscriptions[x].callback});
            }
            for(x=0;x<temp.length;x++){
                temp[x].fn.apply(this,[args]);
            }
        }
    };

    console.log(window.ps);
    console.log(ps);
})(window);

私の質問:

  1. すべてのメソッド/変数がglobalスコープで宣言されていると思いますよね?この仮定が私が持っている他の質問を駆り立て、何かを見逃していないことを確認したかったので、私は尋ねます.
  2. ps = window.ps上記の行で、彼がすでにpsグローバルスコープで宣言されている場合、何をする必要がありますか? 行われていることは と同等ではありませんps = psか?
  3. 質問 2 で言及されている上記のロジックに名前または規則がある場合、それは何ですか? 見ているものを Google で検索する良い方法が思いつきませんでした。

誰かがテクニックを説明するより良い方法を持っていて、見つけやすくするために私の質問のタイトルを更新したい場合は、お気軽にそうしてください.

4

1 に答える 1

1

それは悪いコードです。それを行うためのより良い方法は次のとおりです。

(function(window){
    var ps = window.ps || {},
    ps.subscriptions = [],
    // ...

    window.ps = ps;
})(this);

適切な測定のために、私は追加します

"use strict"; // turn on "strict" mode 

初めにも。

于 2013-09-29T13:16:16.107 に答える