栈和堆的整理

栈和堆

javascript的变量分为两类,简单类型和引用类型

number,strimg,boolean,undefind,unll,symbol 是简单类型

object,array,function, 是引用类型

简单类型存储在栈中。

饮用类型的对象存储在堆中,但是引用类型的引用地址存储与栈中,所以引用类型赋值是,只是将存于栈中的引用地址赋值了。赋值后的引用地址指向堆中的同一个对象。

栈:栈会自动分配内存空间,自动释放,存储基本数据类型,简单的数据段,占用固定大小空间。(string, number, boolean, unll, undefined)

堆: 动态分配内存空间,大小不定,也不会自动释放,存放引用数据类型,指可能又多个值构成的对象,保存在堆内存中,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的指针。(function, array, object)

栈和堆的区别

栈 所有方法中定义的变量都是存放在栈中的,随着方法执行结束,方法的内存栈也会自然销毁。

优缺点

优点是,存取速度快,仅次于存在CPU中,数据可以共享,缺点是,存放的大小和生命周期固定,可操作性差

堆的特性:

堆的特性是存于堆中的对象是不会随着对象执行完成而销毁,即使对象之行结束,堆内存中的对象也可能会因为被其他地方饮用而不会被销毁,创建对象就是为了反复利用。

栈和堆是传值和传址的区别

例子:

var a = [1,0,9,8,7];

var b = a;

var c =a[0];

console.log(b); //[1,0,9,8,7]

console.log(c); //1

//改变数值

b[1]=3;

c=5;

console.log(b[1]); //3

console.log(a[0]); //1

上面例子中a赋值给b因为a是array类型,所以是将a对应的堆地址传给了b,而a[0]是一个确定的值属于讲对应栈中的值传递。所以修改b的同时b对应的地址文件会被修改,而c却因为修改的是栈中数据,不会影响到堆中数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值