变量,数据和内存
数据:存储在内存里面的010101
内存:通电后产生可存储数据的空间,断电后数据消失,内存中有两块数据,一块是数据,一块是地址
变量:由变量名和变量值组成,每个变量都对应一小块内存,变量名用来查找内存,变量值为该内存中保存的数据
相关问题
关于赋值与内存
赋值无非就两种
赋值的是值
var a = 1;
var b = a;
//b赋值的是1
赋值的是地址
var a = {};
var b = a;
//b赋值的是a的地址
关于引用变量赋值的问题
当两个引用变量指向同一对象通过一个变量修改对象内部数据,另一个变量看到的是修改之后的数据
var obj1 = {name:"zlearn"}
var obj2 = obj1 //此时,obj2存的数据就是obj1的数据,obj1的数据就是对象的地址值
obj2.age = 12
console.log(obj1.age)
//此时输出的是{name:"zlearn",age:12}
以下要注意作用域
var a = {age:13}
function fn2(obj){
obj={
age:15
}
}
fn2(a)
console.log(a.age)//输出的是13不是15
栈:01x1001, 01x1002
⬇ ⬇
堆:{age: 15} {age: 13}
变量a的值为01x1002
变量obj的值为01x1001
当程序运行时,fn2(a)这一步就相当于obj = a,obj的地址值指向的对象时{age:15},a的地址值还是01x1001,所以输出的是13
js引擎如何管理内存?
内存生命周期:
分配小内存空间(变量的内存空间),得到它的使用权
存储数据,可以反复操作
释放小内存空间
当var b = {} 要被释放的时候,b自动释放,b所指向的对象所在后面的某一个时刻由垃圾回收器回收。
对象被释放的时候要成为垃圾对象,再被回收