Imaginemos que tenemos el siguiente fragmento de código:
let a = 10; let b = 10 printNumber(10) function printNumber(num){ console.log(num) } ¿Compartirán los valores primitivos 10 , que se asignan a las variables a y b y también se pasan como argumento a la función printNumber , la misma ubicación de memoria? ¿Será efectivamente solo un valor primitivo 10 almacenado en la memoria que se puede usar en el código fuente un número ilimitado de veces sin la necesidad de inflar la memoria?
No, las variables a y b no comparten la misma ubicación de memoria. Cada variable se almacena en una pila. Entonces transmiten el mismo valor pero no la misma referencia.
Pero, por supuesto, JavaScript accede al valor 10 , en sí mismo, a través de una ubicación de memoria específica, que JavaScript conoce.
(Descargo de responsabilidad: espero haber entendido la pregunta correctamente)
En su ejemplo, está creando dos variables independientes a, b con el mismo valor 10 : se asignan durante la compilación JIT, por lo que efectivamente obtiene 2 ubicaciones de memoria con variables a, b que coincidentemente tienen el mismo valor. El número original en sí no forma parte del código compilado JIT. Aparte de eso, está creando una función ( printNumber ) con un parámetro ( num ) que se completará durante la compilación JIT con el número (nuevamente, 10) al invocar la función ('pasar el argumento'). Luego, el parámetro tiene un alcance local dentro de la función, y la memoria asignada se recolectará como basura después de salir de la función. Entonces, la huella de memoria de su programa JS no está definida por el uso de constantes (sus valores primitivos), sino por la cantidad de variables que declara (y muchas otras cosas, por supuesto).
Para hacerlo un poco más claro, agregué algunos resultados a su programa junto con algunas mutaciones variables.
let a = 10 let b = 10 console.log('a init',a) console.log('b init',b) printNumber(10) printNumber(a) printNumber(b) function printNumber(num){ console.log('printNumber - num',num) console.log('printNumber - a',a) a++; num++; } console.log('a exit',a) console.log('b exit',b)