我正在处理一些具有以下Javascript功能的代码。我已经阅读了this SO文章,该文章已经解释了一些内容,但我仍然对此代码的工作方式感到困惑。
代码如下:
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 :(得分:1)
{}
是一个对象文字。
{
foo: bar
}
...是一个对象文字,其属性名为" foo"其值等于变量" bar"。
的值该函数返回一个具有三个属性的对象,其中值是在其中定义的函数。
答案 1 :(得分:1)
因为这三个内部函数(publish
,subscribe
和unsubscribe
)是在另一个函数中声明的,所以它们不会存在于外部函数之外的任何地方
通过返回具有这三个属性的{ ... }
对象,您有效地向messageBus
- messageBus
提供'公共'API将等于具有这3个函数属性的对象,所以可以从外部范围调用它们。
如果没有返回该对象,则无法从外部作用域中的任何位置调用这三个内部函数。