Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从函数创建全局变量';s返回值_Javascript - Fatal编程技术网

Javascript 从函数创建全局变量';s返回值

Javascript 从函数创建全局变量';s返回值,javascript,Javascript,我在这里查看Addy Osmani关于出版物/订阅模式的要点: 他将对象表面化为一个全局对象,如下所示: ;(function ( window, doc, undef ) { var topics = {}, subUid = -1, pubsubz ={}; .... getPubSubz = function(){ return pubsubz; }; window.pubsubz = getPubSubz(); 创建getPubSubz函数的价值是什么

我在这里查看Addy Osmani关于出版物/订阅模式的要点:

他将对象表面化为一个全局对象,如下所示:

;(function ( window, doc, undef ) {

var topics = {},
    subUid = -1,
    pubsubz ={};

....

getPubSubz = function(){
    return pubsubz;
};

window.pubsubz = getPubSubz();
创建
getPubSubz
函数的价值是什么?简单地写下:

window.pubsubz = pubsubz;

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


很难说作者到底在想什么,但是在不断增长的代码库中,如果获取
pubsubz
对象需要更高级的逻辑,那么拥有一个“getter”函数可能会有一些价值,它可以被修改

在这种情况下使用getter的原因只有两个:

  • 之前在getter中有一些额外的代码(可能是日志)
  • Addy Osmani只是遵循良好实践*,包括一个getter,甚至为将来添加额外代码提供了机会
  • 通过GitHub的强大功能,我们实际上可以,因为getter是在当前状态下添加的,所以我认为我们可以得出结论,这只是一个良好实践的问题


    *正如jantimon在下面的评论中所提到的,这在大多数情况下(包括本例)并不是特别有利,并且不一定需要以本代码为例。

    您能具体说明一下它的用处吗?在其他语言中,getter和setter用于封装,但在这种情况下,我看不出它的优点。@Hazaart:如果代码增长到从许多不同的地方访问
    pubsubz
    对象,然后有一天您意识到您想根据切换变量的状态使用不同的
    pubsubz
    实例,最好只需要更改
    getPubSubz
    方法的实现,而不是访问它的所有内容。当然,在这种情况下,将对象作为全局变量公开是不明智的。正如我所说,很难知道作者在想什么。他也使用了undef,尽管它不是必需的。@jantimon很好,它对JS不是特别有利,你明白了。也许只是来自于良好实践的语言的旧习惯:)