为什么将全局声明的变量的值设置为Window对象中的相同值?

时间:2013-09-29 13:08:28

标签: javascript publish-subscribe

code in question

(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中提到的上述逻辑有名称或惯例, 它是什么?我无法想到谷歌的好方法 看到。
  4. 如果有人有更好的方法来描述这项技术并希望更新我的问题标题以便于查找,请随时这样做。

1 个答案:

答案 0 :(得分:1)

这是糟糕的代码。更好的方法是:

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

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

为了更好的衡量,我会添加

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

一开始也是。