Javascript 从函数创建全局变量';s返回值
我在这里查看Addy Osmani关于出版物/订阅模式的要点: 他将对象表面化为一个全局对象,如下所示:Javascript 从函数创建全局变量';s返回值,javascript,Javascript,我在这里查看Addy Osmani关于出版物/订阅模式的要点: 他将对象表面化为一个全局对象,如下所示: ;(function ( window, doc, undef ) { var topics = {}, subUid = -1, pubsubz ={}; .... getPubSubz = function(){ return pubsubz; }; window.pubsubz = getPubSubz(); 创建getPubSubz函数的价值是什么
;(function ( window, doc, undef ) {
var topics = {},
subUid = -1,
pubsubz ={};
....
getPubSubz = function(){
return pubsubz;
};
window.pubsubz = getPubSubz();
创建getPubSubz
函数的价值是什么?简单地写下:
window.pubsubz = pubsubz;
是的,在这种情况下,因为
getPubSubz
只在一个地方被调用,在声明它之后,它可以安全地内联
很难说作者到底在想什么,但是在不断增长的代码库中,如果获取
pubsubz
对象需要更高级的逻辑,那么拥有一个“getter”函数可能会有一些价值,它可以被修改
在这种情况下使用getter的原因只有两个:
*正如jantimon在下面的评论中所提到的,这在大多数情况下(包括本例)并不是特别有利,并且不一定需要以本代码为例。您能具体说明一下它的用处吗?在其他语言中,getter和setter用于封装,但在这种情况下,我看不出它的优点。@Hazaart:如果代码增长到从许多不同的地方访问
pubsubz
对象,然后有一天您意识到您想根据切换变量的状态使用不同的pubsubz
实例,最好只需要更改getPubSubz
方法的实现,而不是访问它的所有内容。当然,在这种情况下,将对象作为全局变量公开是不明智的。正如我所说,很难知道作者在想什么。他也使用了undef,尽管它不是必需的。@jantimon很好,它对JS不是特别有利,你明白了。也许只是来自于良好实践的语言的旧习惯:)