我试图了解基元的值如何在堆栈中改变。假设我声明并初始化了四个基元。
let myNumber = 12;
let myBool = true;
let myString = "hello";
let myNull = null;
我知道,它们会像这样存储在堆栈中。栈
那么,如果我这样做。
myNumber = 30;
问题: javascript引擎会不会从堆栈中弹出myNull, myString, myBool(并将它们存储在内存中的其他地方), 然后将myNumber的值改为30 然后将myBool, myString, myNull推回堆栈?
对基元变量的赋值是日常的基础任务。这里需要理解的关键点是,当我们在给一个变量赋值时,实际上我们是从堆中给变量分配地址,因为我们知道在js中,基元变量是不可变的,因此如果值发生变化,那么那里所指的地址也会发生变化.如果我们按照这个概念去做,比在我们的调用栈中,我们实际上是在存储堆内存位置的地址,而不是实际的值。你可以参考下面的媒介链接来更好的理解同样的内容.希望对你有所帮助。:)
https:/medium.com@ethannamjavascripts-memory-model-7c972cd2c239。
(注:也请大家从js官方文档中去了解一下垃圾收集器的概念,以便对基元变量赋值和垃圾收集有进一步的深入理解:) )