Here I am summarizing advanced/interesting(mostly asked during interview) features with easy to understand online resources.
A closure is the combination of a function and the lexical environment within which that function was declared.
A Promise is a proxy for a value not necessarily known when the promise is created. It allows you to associate handlers with an asynchronous action's eventual success value or failure reason. This lets asynchronous methods return values like synchronous methods: instead of immediately returning the final value, the asynchronous method returns a promise to supply the value at some point in the future.