我在这里读到了关于揭示模块模式的Addy的书。但是,如果您执行示例代码,它实际上返回undefined。修复是在每个被调用函数之前添加'return'。如果使用RMP,我是否应该为每个被调用的函数添加返回值?这是使它运作的正确方法吗?我错过了什么?
var myRevealingModule = (function () {
var privateCounter = 0;
function privateFunction() {
privateCounter++; <--need to add return
}
function publicFunction() {
publicIncrement(); <-- need to add return
}
function publicIncrement() {
privateFunction(); <--need to add return
}
function publicGetCount(){
return privateCounter;
}
// Reveal public pointers to
// private functions and properties
return {
start: publicFunction,
increment: publicIncrement,
count: publicGetCount
};
})();
myRevealingModule.start(); <-return undefined
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript
答案 0 :(得分:2)
该问题与RMP无关,而是与函数和返回值无关。
为什么你会期望一个不返回任何内容的方法实际返回undefined以外的东西?
仔细看看这里。实际上start
会调用publicFunction
,但后者的主体不会返回任何内容。
然而,你称之为并期待一个价值。
您的问题的答案是:是的,如果您想要从函数返回值,则必须返回。
在这个特例示例中,他们有一个方法count
来返回当前值。另外两种方法仅用于控制计数器。