数据、变量和内存的关系

数据、变量和内存的关系

  • 什么是数据?

    存储在内存中代表特定信息的内容,本质上是二进制的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所指向的对象在后面的某个时刻被垃圾回收器回收
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值