首页 > 代码库 > JavaScript 变量类型 保存内存中的位置 和 引用
JavaScript 变量类型 保存内存中的位置 和 引用
1. JavaScript变量
基本类型值在内存中占据固定大小的空间 因此被保存在栈内存中。
从一个变量向另一个变量复制基本来下的值 会创建这个值得一个副本。
引用类型的值是对象 保存在堆内存中。
包含引用类型值得变量实际上包含的并不是对象本身 而是一个指向该对象的指针。
从一个变量向另一个变量复制引用类型的值 复制的其实是指针 因此两个变量最终都指向同一个对象
2. 堆和栈
堆栈在数据结构里面的含义就是一组数据的存放方式 后进先出
push: 在最顶层加入数据
pop: 返回并移除最顶层的数据
top: 返回最顶层数据的值 但不移除
isempty: 返回一个布尔值 表示当前stack是否为空栈
Stack 是一种存放数据的内存区域。系统会划分出两张不同的内存空间 stack(栈) 和堆(heap)
stack (栈)是有结构的(就像后进先出 从下到上) 每一个区域都按照一定次序存放,可以明确知道每个区块的大小。 heap是没有结构 数据可以任意存放。因此stack的寻址速度要快于heap。
一般来说 每个线程分配一个stack(栈) 每个进程分配一个heap。就是说 stack独占线程,heap是共享线程。
所以 数据存放的规则是 只要是局部的 占用空间确定的数据 一般都存放在stack里面。否则就放在heap里面。局部变量一旦运行结束 就会GC回收 而heap的那个对象实例直到系统的GC将这里的内存回收。因此一般内存泄漏都方生在heap。
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,这些洗碗 后续工作好像就是垃圾回收 不用我们自己动手。他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,但是要我们自己动手去收拾这些 东西 洗碗等等 而且自由度大。
JavaScript 变量类型 保存内存中的位置 和 引用