How would you appropriately explain why these two examples differ?
let a = 1;
let b = a;
a = 2;
console.log(b); // → 1
let myArray = [1, 2, 3];
let ourArray = myArray;
ourArray = 10;
console.log(myArray); // → [1, 2, 10]
You mix implementation details ("exist once in memory") with evaluation strategies ("reference types and value types") and specific expressions ("mutation vs. reassignment") in your question. Implementation details vary among various browsers and are likely to change in the future.
let s = "abc"; let t = s; s = "x"; s; // "xbc"; t; // "abc";
Variables (or identifiers or name bindings) that are based on value types directly contain their values. If such a mutable string is mutated, then only the value of the corresponding identifier would be affected.
Unlike strings, numbers are atomic. For atomic primitives there is no practical distinction of mutation and reassignment:
let n = 0; n = 1, n++, n = n + 1; // all reassignments
Reference types have identity, that is, their identity is no longer tied to values:
let xs = ; xs === ; // false