问题一:
从内存来看 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 元素绑定