It’s that space in memory where the engine saves values under the variable names so when they are called from the call-stack this will have a direct link to those values.
Complex variables have different spaces within the memory heap.
Personal Opinion: I think the Engine first read and situate the variables and functions inside the memory heap to late on when used this will have a faster workflow than interpreting as it did before with “var”.
The call-stack simply said is the list of duties the engine must resolve starting always with the global object until the last problem in our code.
Inside a duty can be a local problem, something like “secondary missions” where there are local variables that are not relevant for the main object but important to resolve the duty. This is called scope.
In other languages is the coder who must mark this variable and erase them to avoid a called “overflow”, literally massive storage of variables within the “memory heap”.
Stack overflow is the situation when the petitions made are massive so it can collapse the memory of the browser. Nowadays with V8, there is a limit of duties in the call-stack avoiding with it crashes issues.
Also “Stack Overflow” is a platform for coders to ask and resolve questions about programming issues.
Apart from the “heap memory” and the “call-stack” we have the APIs, in this case, are tasks that the engine will do once the “call-stack” is done.
Something important to notice is that those tasks that remains in the call-stack are the main ones to complete by the engine and finally it will take the duties from the browser “call-back queue”. This is the last process is called “event loop”, it’s basically the constant watch on the “call-stack” to finally send the results in the “call-back queue”.