Esta no es realmente una pregunta per se, pero estoy buscando información sobre por qué JavaScript crea un nuevo valor cada vez que se reasigna algo.
Por ejemplo, un bucle for :
for(let i = 0; i < 1000; i++) console.log(i);
He investigado que todas las primitivas son inmutables y reasignarlas en realidad crea un nuevo valor en la memoria, ¿por qué no sobrescribir la dirección existente?
Parece ineficiente que un ciclo for en ejecución cree 100 ubicaciones no utilizadas cuando se completa cuando podría haber usado 1. Me parece extraño, pero estoy seguro de que hay una razón válida para ello.
Reasignar un valor primitivo a una variable sobrescribe el valor en la dirección a la que apunta la variable con una copia del valor primitivo.
Este bucle sobrescribirá el valor en la dirección a la que apunta la variable i 1000 veces. No asignará 1000 direcciones en la memoria.
for(let i = 0; i < 1000; i++) {console.log(i);}
Lo que es cierto es que si le asignas a una variable un valor primitivo de otra variable, el valor se copiará y ambas variables apuntarán a ubicaciones diferentes en la memoria. Usted puede comprobarlo:
let a = 10; let b = a; // the value 10 from a gets copied to b a = 20; // the value 10 gets overwritten by 20 in a console.log(b); // prints 10
Editar:
Para responder la pregunta directamente: decir que los valores primitivos js son inmutables es otra forma de decir que se asignan por valor en lugar de matrices y objetos que se asignan por referencia (o son mutables).
Si ocurre o no una nueva asignación de memoria en cada asignación de un valor primitivo a una variable es un detalle de implementación, pero puede confiar en que los motores js modernos lo hacen de la manera más eficiente.