2

How can you pass arguments to a function when implementing the Revealing module pattern in JavaScript. I have a module like this

var GlobalModule = (function() {
    function consoleLog(textToOutput) {
        console.log(textToOutput);
    }

    return {
        consoleLog: consoleLog()
    };
})();

Later on, when i run GlobalModule.consoleLog("Dummy text");, I get undefined as the output.

4 Answers 4

4
return {
    consoleLog: consoleLog()
};

That part of your code is wrong. You're exporting the Result of the consoleLog call due to the () at the end of the function, where you want to export the function itsself. So just remove the function call:

return {
    consoleLog: consoleLog
};
Sign up to request clarification or add additional context in comments.

Comments

2

Do with function inside the return object

var GlobalModule = (function() {
  return {
    consoleLog: function(textToOutput)
    {
     console.log(textToOutput);
    }
  }
})();

GlobalModule.consoleLog("Dummy text");

Simply Do like this same output achieved . object => function call .No need a return object

 var GlobalModule ={
        consoleLog: function(textToOutput) {
                                    console.log(textToOutput);
                                  }
      }

    GlobalModule.consoleLog("Dummy text");

2 Comments

but what if you don't want to invoke a method or property of the module, i.e. i want to do myRevealingModule('my-string'), and not myRevealingModule.doSomething('my-string').
@RonRoyston you need a direct function call.see this fiddle
2

Change the line

consoleLog: consoleLog()

To

consoleLog: consoleLog

Or even(es6) to:

consoleLog

Comments

1

You can do like this

var GlobalModule = (function() {
    function consoleLog(textToOutput) {
        console.log(textToOutput);
    }

    return {
        consoleLog: consoleLog // () is removed otherwise it will execute immediately
    };
})();

GlobalModule.consoleLog('Hello')

DEMO

You you want to pass a global variable pass it in the parenthesis of the IIFE

var GlobalModule = (function(x) {
    function consoleLog(textToOutput) {
        console.log(textToOutput,x); // will log Hello temp
    }
   return {
        consoleLog: consoleLog
    };
})('temp');

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.