js高级学习笔记(b站尚硅谷)-2-数据、变量、内存三者的关系

一,数据的概念

数据是对客观事物的符号表示,是指所有能输入到计算机中并被计算机程序处理的符号的总称。

二,内存的概念

内存条通电后产生的 可以存储数据的空间(临时的)
内存的产生和死亡:内存条(电路板)=>通电 =>产生内存空间=>存储数据=>处理数据=>断电=>内存空间和数据都丢失
内存一般采用半导体存储单元,包括随机存储器(RAM)(程序运行内存,可存取,断电后消失),只读存储器(ROM)(只读,存永久程序,断电数据不丢失),以及高速缓存(CACHE)(它位于CPU与内存之间,是一个读写速度比内存更快的存储器。)。

内存空间分类:
栈:全局变量/局部变量/标识对象的变量(存地址)
堆:对象(包括函数和数组)

三,变量的概念

可变化的量,由变量名和变量值组成。
每个变量都有对应的一小块内存,变量名用来查找对应的内存,变量值就是这个内存中存储的数据值

四,普通数据类型在和引用数据类型在内存中的存储对比

<script type="text/javascript">
		    var a=1;
			console.log(a);      //1
			var obj={name:"tom"};    
			console.log(obj);        //{name:"tom"}  obj存的是指向堆空间的地址,所以这里读取的是堆空间中的整个对象
			console.log(obj.name);    //tom
		</script>

在这里插入图片描述

五,var a=xxx,中存储的数据

			1.xxx是基本数据类型
			var a=1;     //a中存的是值:1
			2.xxx是对象
			function b(){
				alert("lala")
			}                 //b中存的是地址,指向堆空间
			3.xxx是变量
			var c;
			c=a;    //赋值基本数据则存值
			c=b;   //赋值对象则存地址
			//故,若是变量,则看它赋值了什么类型,

六,引用变量的赋值问题

			var obj={
				name:"tom",
				age:16
			};
			var obj2=obj;
			obj2.name="Ben";
			obj2.age=18;
			console.log(obj.name);    //Ben
			console.log(obj.age);    //18

在这里插入图片描述
两个指向同一个对象了,他更改了,另一个读取的,自然是更改后的值。

七,函数的执行过程

7-1,变量a作为函数形参和不作为形参时的对比(基本数据类型时)

			var a=1;
			console.log(a);    //1
			function add(b){     //这个时候把a的值复制一份,赋值给堆空间中add函数的形参b了
				console.log(a);  //1    
				console.log(b);  //1
				b=b+5;            //在栈空间中进行操作,把b加上5    
				console.log(a);  //1   这里访问的依旧是栈空间的a
				console.log(b);  //6   这里访问的是堆空间中的b
			}
			add(a);       //函数调用结束之后,对应的堆空间数据销毁,b不复存在
			console.log(a);    //1  a的值始终没有改变
			//实际上,函数形参的操作,是把栈空间的值进行复制一份到堆空间进行操作,完成后销毁,不会影响到原有的堆栈空间变量值

在这里插入图片描述

			var a=1;
			function add2(){
				a=a+2;
			}
			add2(a);
			console.log(a);   //3  因为这个函数不存在形参,它的作用就是直接改变栈空间a的值。所以a变了

在这里插入图片描述
7-2,变量a作为函数形参(引用数据类型时)

			var a=[1,2,3,4,5];
			function change(b){
				b[2]="变更索引为2的数组元素";
			}
			change(a);
			console.log(a[2]);    //变更索引为2的数组元素

在这里插入图片描述
结论:作为形参时,都是把当前变量的值复制一份到堆空间中,只是基本数据类型存的值是值,引用数据类型存的值是地址。而且函数调用结束之后局部变量(包括形参)会被销毁,所以就导致了不同的结果

八,对于释放内存

局部变量:函数执行完毕后立即释放
对象:先成为垃圾对象,再在垃圾回收器回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值