jmoneilthe2
jmoneilthe2

Reputation: 725

JavaScript Module Pattern written two different ways with same results

I have been developing an app using JavaScript and all of my scripts are using the Module Pattern. Example:

              var MyFunction = (function(){


             }());

I saw where someone placed the name of the function inside the calling (). Example:

          var MyFunction = (function(){


         }(MyFunction));

I add this to some of my page and it still ran normal. Can anyone explain why it would be written with the name of the function inside the ()?

Upvotes: 0

Views: 44

Answers (2)

Sébastien RoccaSerra
Sébastien RoccaSerra

Reputation: 17221

The two versions you show are equivalent, but the second one is misleading: the parameter of the IIFE is not used.

You might want to pass (and use) an argument to a module IIFE to alias a dependancy:

var myModule = (function(t) {
    //...
    var someText = t('some.key');
    //...
})(translationModule);

Another use which is opposite to your second example is to declare an argument to the IIFE, and pass nothing. This is to make sure that undefined is... undefined:

var myModule = (function(undefined) {
    // Here you're safe from bizare third party code which might define 'undefined'.
})();

In his book Learning JavaScript Design Patterns, Addy Osmani shows several variations of the module pattern:

Recommended reading.

Cheers!

Upvotes: 0

Katana314
Katana314

Reputation: 8620

Can anyone explain why it would be written with the name of the function inside the ()?

No. That coder didn't know quite what they were doing. (A lot tends to get left in when someone doesn't want to break working code)

That said, there are some situations where you would pass something into the IIFE, like window or jquery. You'd treat it as an argument on the inside, though.

Upvotes: 2

Related Questions