- Defined as a way to provide both private and public encapsulation for classes
- functions/properties are encapsulated using closures
- Start private attribute names with underscore (convention)
- Reduces chance of function name conflict with other devs
- You can return specific function based on some configuration or environment
- Revealing pattern makes it more clear at the end of module about the properties which are made public.