- Closures: A closure gives access to an outer function's scope from an inner function.
- Currying: Currying is a transformation of functions that translates a function from callable as f(a, b, c) into callable as f(a)(b)(c).
- Promises and Observables: These help you work with asynchronous functions.
- Devices like mobiles, tablets, and laptops
- On the client-side as well as the server-side
3. Open standards and community
4. Modern frameworks