A call stack is a mechanism for an interpreter (like the JavaScript interpreter in a web browser) to keep track of what function is currently being run and what functions are called from within that function, etc.
We start with an empty Call Stack. Whenever we invoke a function, it is automatically added to the Call Stack. Once the function has executed all of its code, it is automatically removed from the Call Stack. Ultimately, the Stack is empty again.
At the most basic level, a call stack is a data structure that uses the Last In, First Out (LIFO) principle to temporarily store and manage function invocation (call).
Types of JS errors: reference errors, syntax errors, range errors, type errors.