Java and ECMAScript are not the same language and, past generalities, have different execution models. While the JLS (Java Language Specification) is very technically precise about things like "references" and the "heap", the ECMAScript specification focuses merely on behavior.
A conforming implementation of ECMAScript must provide and support all the types, values, objects, properties, functions, and program syntax and semantics (behavior) described in this specification.
ECMAScript is executed by a "JavaScript Engine". Generally there is one "environment" per browser window; that is, each window
object is the global context for at most one concurrent Program execution. This effectively means that each browser window "is a separate VM".
Each mutable object is mutable, and each object is reachable (and thus guaranteed to be alive) only as long as it is strongly referenced. The implementations certainly use "heap" memory and "references", as it is a practical/required design choice; but neither the usage of a "heap" or "references" (in this sense) is discussed in the specification.
The specification discusses the stack in terms of Execution Contexts which is composed of a logic chain.
When control is transferred to ECMAScript executable code, control is entering an execution context. Active execution contexts logically form a stack ..