- Freeze the scoping
- Code encapsulation
- Creating private or public scope
- Creating a namespace
- Creating public and private encapsulation
You can add properties after creation of object. Also, an Immediately- Invoked function expression looks like the example below:
It is a self-contained module or an anonymous closure. It creates the scope for the function and everything is wrapped inside that function itself. So, when we tried to access price outside the function, it was undefined. Keep in mind that this anonymous module is present in the global scope.We can export the module by assigning it to a variable using expression, and then creating private and public encapsulation using the return statement. Consider below code:
We are doing following in above code snippet,
- Creating an IIFE.
- Assigning IIFE function to a variable
- Returning an anonymous object literal to create private and public encapsulation.
All properties of returned object would become public and can be accessed outside the module, however, any variable not part of the returned object cannot be accessed outside module. That is why for price we are getting 800 as the output, but, for color, value is undefined because it is private to the module1. Let us modify module1 to have more private and public properties, as shown in the listing below: