又一道思考题

问题一:

从内存来看 null 和 undefined 本质的区别是什么?

个人解答:null 存放在堆内存中,undefined 存放在栈内存中,因为 null 是对象,V8引擎中的所有的JS对象都是通过堆来进行内存分配的。undefined是普通变量。

木易杨的解答:

给一个全局变量赋值为null,相当于将这个变量的指针对象以及值清空,如果是给对象的属性赋值为null,或者局部变量赋值为null,相当于给这个属性分配了一块空的内存,然后值为null, JS会回收全局变量为null的对象。

给一个全局变量赋值为undefined,相当于将这个对象的值清空,但是这个对象依旧存在,如果是给对象的属性赋值 为undefined,说明这个值为空值

问题二:

ES6语法中的 const 声明一个只读的常量,那为什么下面可以修改 const 的值?

const foo = {}; 
foo = {}; // TypeError: "foo" is read-only
foo.prop = 123;
foo.prop // 123

通常来讲常量一般存放在池中,池也叫常量池,const 存的是常量,实际上是一个内存地址,上面的不可以直接给 foo 赋值,但是可以更改内存中的内容。

问题三:

哪些情况下容易产生内存泄露?

  • 对象引用对象,循环引用的情况
  • 声明了很多全局,内存回收不容易判断并回收
  • DOM 元素绑定
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,167评论 1 32
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,802评论 3 83
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,582评论 1 4
  • 上天赋予的生命,就是要为人类的繁荣、和平和幸福而奉献。——松下幸之助 2018年6月14日是联合国第14个世界献血...
    笨企鹅1990阅读 1,578评论 0 0
  • 风来风去 一地碎玉 飘落不表示远离 多少初冬的诗句 埋伏在层叠交错的叶里 风去风来 雪花皑皑 来慰这真情告白 这一...
    微雨凭栏阅读 494评论 6 3