JS 堆栈

堆是堆内存的简称,栈是栈内存的简称。

堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内存空间,并由系统自动释放.

JS的数据类型
  • 基本数据类型
    Undefined、Null、Boolean、String、Number、Symbol都是直接按值直接存在栈中,每种类型的数据占用的内存空间大小都是固定的,并且由系统自动分配自动释放
  • 引用数据类型
    Object,Array,Function这样的数据存在堆内存中,但是数据指针是存放在栈内存中的,当我们访问引用数据时,先从栈内存中获取指针,通过指针在堆内存中找到数据

以代码为例:

let arr_origin = [1,2,3,4,5];
let arr_copy = arr_origin;
let arr2 = arr_origin[2];

如果执行下面代码:

arr_copy[1] = 'change1';
arr2 = ‘change2’

我们发现arr_origin中的下标是1的值变成可change1,但是下标是2的值并未变化。原因是:arr_copy是arr_origin栈指针的引用,并未开辟新的内存空间,但是arr2是在栈内存中独立存在,所以会产生上述结果。熟悉此原理,则数据的深浅拷贝就不难理解了!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文:http://www.cnblogs.com/jingwhale/p/4884759.html 一.堆栈的定...
    BULL_DEBUG阅读 1,436评论 0 1
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,891评论 2 9
  • 这几天吃饭,发现同事都开始自己带腌制的咸菜,有酸辣的萝卜,有诱人的辣白菜,还有辣度不等的各色辣椒酱,瞬间便感觉到,...
    张严心阅读 3,526评论 2 5
  • 2018年7月8日、星期日、晴 今天是署假的第二天,早上子墨去舞蹈学校上学。下午五点接子墨去上刚琴课。课前子墨演奏...
    刘子墨妈妈阅读 689评论 0 0
  • 李红丽 焦点网络初七 坚持分享第十三天 年少时,不能容忍生活里的摩擦分歧,一言不合就大发脾气,用尖利的语言、激烈的...
    丽日晴空阅读 1,352评论 0 1