数据、变量和内存的关系
-
什么是数据?
存储在内存中代表特定信息的内容,本质上是二进制的0101
//数据的特点:可传递、可运算、 var age = 10;//10就是数据 var a = 2;//2就是数据
-
什么是变量?
可变化的量,由变量名和变量值组成,每个变量都对应一块小内存,变量名用来用来查找对应的内存
-
什么是内存?
系统临时存储数据的设备中的空间,内存分为栈空间(全局变量和局部变量)和堆空间(对象/函数)
内层产生和死亡:内存条==》通电==》产生内层空间==》存储数据==》处理数据==》断电==》内存空间和数据消失
内存中所有操作的目标都是数据
一块小内层里的2种数据:内部存储的数据(基础数据类型)、地址数据(引用数据类型的地址)
代码执行过程:代码加入内存==》预编译==》解析代码==》代码执行
-
数据、变量、内层三者之间的关系
内存用来存储数据的的临时空间,变量用来标识内存
相关问题
关于赋值和内层的问题
/**问题var a = xxx; a内存中保存的是什么?
xxx是基本数据类型:保存的就是这个数据
xxx是引用数据类型:保存的就是对象的地址数据
xxx是一个变量:保存的xxx的内存内容(可能是基本数据或地址数据)
*/
var a = 3;
a = function(){
};
var b = 'abc';
a = b;
b = {};
a = b;
关于引用变量赋值问题
- N个引用变量指向内存中的同一个对象,通过一个变量修改对象内部数据,其他变量看到的是修改之后的数据
- 2个引用变量指向内存中的同一个对象,让其中一个变量指向另一个对象,另一个变量依然指向前一个对象
var obj1 = {name: 'tom'};
var obj2 = obj1;//这里吧obj1的内存内容(这个内容是个地址数据)赋值给obj2
obj1.name = 'jack';
console.log(obj2.name);//jack
function fn(obj) {
obj.name = 'A';
}
fn(obj1);
console.log(obj2.name);//A
var a = {age: 12};
var b = a;
a = {name: 'bob', age: 13};
console.log(b.age, a.name, a.age);//12 , bob , 13
function fn2(obj) {
obj = {age: 15};//obj成了垃圾对象
}
fn2(a);
console.log(a.age);//13
在js调用函数时传递变量参数时,是值传递还是引用传递?
理解1:都是值传递(传递的是基本数据或者地址数据)
理解2:可能是值传递,也可能是引用传递(地址值数据)
var a = 3;
function fn(a) {
a = a + 1;
}
fn(a);
console.log(a);//3
JS引擎如何管理内存
-
内存生命周期
1)分配小内存空间,得到使用权
2)存储数据,可以反复进行操作
3)释放空间
-
释放内存
局部变量,函数执行完一般都释放(除闭包情况外)
对象:成为垃圾对象==》垃圾回收器回收
var a = 3;
var obj = {};
function fn(){
var b = 0;
}
fn();//执行完后b自动释放,b所指向的对象在后面的某个时刻被垃圾回收器回收
收
var a = 3;
var obj = {};
function fn(){
var b = 0;
}
fn();//执行完后b自动释放,b所指向的对象在后面的某个时刻被垃圾回收器回收