2014-10-29 24 views
0

我正在使用一段具有以下Javascript函數的代碼。我已閱讀this SO文章,它已經解釋了一些事情,但對於這段代碼的工作原理我仍然有點困惑。自我調用的Javascript函數

的代碼如下:

messageBus = (function() { 
    var messages = {}; 

    function publish(name, data) { 
     //does some stuff 
    } 

    function subscribe(name, callback) { 
     //does some stuff 
    } 

    function unsubscribe(name, callback) { 
     //does some stuff 
    } 

    return { 
     publish:publish, 
     subscribe:subscribe, 
     unsubscribe:unsubscribe 
    }; 
})(); 

,然後被

messageBus.publish("Submit"); 

叫什麼是

return { 
    publish:publish, 
    subscribe:subscribe, 
    unsubscribe:unsubscribe 
}; 

位代碼做呢?

+0

它返回一個包含三個屬性'publish','subscribe'和'unsubscribe'的對象。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Using_object_initializers – 2014-10-29 16:10:11

+0

它返回一個對象。您可以執行該代碼並在控制檯中查看messageBus。 – j08691 2014-10-29 16:10:12

+0

好的謝謝我現在明白了 – 2014-10-29 16:12:26

回答

1

由於這三個內部函數(publishsubscribeunsubscribe)的另一函數內聲明,他們也不會存在任何地方外功能之外。

通過返回{ ... }對象與三個屬性,您可以有效地提供「公共」的API到messageBus - messageBus將等於物體與這3個功能性,這樣他們就可以從外部範圍被調用。

如果沒有返回該對象,則無法從外部範圍的任何位置調用這三個內部函數。

1

{}是對象字面量。

{ 
    foo: bar 
} 

...是一個名爲「foo」的屬性的對象字面值,其值等於變量「bar」的值。

該函數返回一個具有三個屬性的對象,其中的值是其中定義的函數。

+0

謝謝我現在明白了 – 2014-10-29 16:12:42