-1

我在这里阅读了 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

4

1 回答 1

2

这个问题与 RMP 无关,而是与函数和返回值有关。

为什么您期望一个不返回任何内容的方法实际上返回未定义以外的内容?

仔细看看这里。start实际上调用但后者的publicFunction主体不返回任何内容。

然而,你调用它并期望一个值。

你的问题的答案是:是的,如果你想从函数中返回一个值,你必须返回它。

在这个特定的例子中,他们有一个count返回当前值的方法。另外两种方法只是用来控制计数器。

于 2015-05-31T22:43:50.773 回答