根据函数的返回值创建全局变量

Creating a global variable from a function's return value

本文关键字:创建 全局变量 返回值 函数      更新时间:2023-09-26

我正在查看Addy Osmani关于发布/订阅模式的要点:

https://github.com/addyosmani/pubsubz/blob/master/pubsubz.js

他将对象呈现为一个全局对象,如下所示:

;(function ( window, doc, undef ) {
var topics = {},
    subUid = -1,
    pubsubz ={};
....
getPubSubz = function(){
    return pubsubz;
};
window.pubsubz = getPubSubz();

创建getPubSubz函数的价值是什么?这样写不是更直接吗:

window.pubsubz = pubsubz;

是的,在这种情况下,因为getPubSubz只在一个地方调用,在声明它之后立即调用,所以可以安全地内联它。

很难确切地说出作者的想法,但在不断增长的代码库中,如果获取pubsubz对象的行为需要更高级的逻辑,那么可以修改"getter"函数可能会有一些价值。

绝对可以。

在这种情况下使用getter只有两个可能的原因:
  1. 先前在getter(可能是logging)中有一些额外的代码
  2. Addy Osmani只是遵循良好的实践*,并包括一个getter -甚至增加了将来添加额外代码的机会。

通过GitHub的强大功能,我们实际上可以消除选项一,因为getter是在当前状态下添加的,所以我认为我们可以肯定地说,这只是一个良好的实践问题。

*正如jantimon在下面的注释中所暗示的那样,这在大多数情况下(包括本例)并不是特别有利,并且这段代码不一定需要作为示例来遵循