美文网首页
javascript堆和栈

javascript堆和栈

作者: a180754bf396 | 来源:发表于2017-09-18 15:19 被阅读0次

javascript变量类型分为基本类型和引用类型

栈 stack”和“堆 heap”

简单的来讲,stack上分配的内存系统自动释放,heap上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。stack一般是静态分配内存,heap上一般是动态分配内存

栈内存

栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,js就在栈中为这个变量分配内存空间,当超过变量的作用域后,js会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用

基本类型

基本类型有 Undefined、Null、Boolean、Number 和String
这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间 它们是直接按值存放的,所以可以直接访问

引用类型

引用类型,值的大小不固定,栈内存中存放地址指向堆内存中的对象。变量中实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。
当我们需要访问引用类型(如对象,数组,函数等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。

传值和传址

举例
let a=[1,2,3,4,5]
let b=a;
let c=a[0]
b[4]=6
c=7
从上面我们可以得知,当我改变b中的数据时,a中数据也发生了变化;但是当我改变c的数据值时,a却没有发生改变。
传值与传址的区别
a是一个数组属于引用类型 当赋予b数据的时候传的是栈中的地址,相当于一个新的不同名的指针,并不是一个新的对象 。而c仅仅是从a堆内存中获取的一个数据值,并保存在栈中。所以b修改的时候,会根据地址回到a堆中修改,c则直接在栈中修改,并且不能指向a堆内存中。


图片.png

var a = {
key1:"11111"
}
function Copy(p) {
var c = {};
for (var i in p) {
  c[i] = p[i];
}
return c;
}
a.key2 = ['小辉','小辉'];

var b = Copy(a);
b.key3 = '33333';

alert(b.key1); //1111111
alert(b.key3); //33333
alert(a.key3); //undefined
原因是key1的值属于基本类型,所以拷贝的时候传递的就是该数据段;但是key2的值是堆内存中的对象,所以key2在拷贝的时候传递的是指向key2对象的地址,无论复制多少个key2,其值始终是指向父对象的key2对象的内存空间。

相关文章

  • JavaScript 中的深拷贝和浅拷贝

    JavaScript 内存中的堆和栈 栈(stack):堆是 JavaScript 用来存储静态数据的数据结构。静...

  • 【Javascript】探究javascript中的堆/栈/任务

    堆/栈/队列 在javascript中,存在调用栈 (call stack)和内存堆(memory heap) ,...

  • javascript堆和栈

    javascript变量类型分为基本类型和引用类型 栈 stack”和“堆 heap” 简单的来讲,stack上分...

  • javascript 栈和堆

    堆和栈 栈:系统会自动分配内存空间,会自动释放,存放基本数据类型undefined、null、boolean、st...

  • js/jquery 学习笔记

    理解JavaScript中的堆和栈 这里先说两个概念:1、堆(heap)2、栈(stack)堆是堆内存的简称。栈是...

  • 栈内存与堆内存

    JavaScript中的执行环境栈和 栈内存与堆内存 小李子_前端 关注 2018.01.17 17:28 字数 ...

  • JavaScript中的堆和栈

    1. 堆heap和栈stack的区别 在计算机领域中,堆栈是两种数据结构,它们只能在一端(称为栈顶(top))对数...

  • javascript中的堆和栈

    这篇文章是对上次堆栈考察题的一个概念补充,我们知道,基本类型是保存在栈内存中,复杂类型保存在堆内存中 堆和栈 定义...

  • V8内存管理及垃圾回收机制

    JavaScript引擎的内存空间主要分为栈和堆。 栈 栈是临时存储空间,主要存储局部变量和函数调用。 基本类型数...

  • V8内存管理及垃圾回收机制

    JavaScript引擎的内存空间主要分为栈和堆。 栈 栈是临时存储空间,主要存储局部变量和函数调用。 基本类型数...

网友评论

      本文标题:javascript堆和栈

      本文链接:https://www.haomeiwen.com/subject/srgvsxtx.html