首页 > 代码库 > 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 变量类型 保存内存中的位置 和 引用