問題一:
從內存來看 null 和 undefined 本質的區(qū)別是什么?
個人解答: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 賦值,但是可以更改內存中的內容。
問題三:
哪些情況下容易產(chǎn)生內存泄露?
- 對象引用對象,循環(huán)引用的情況
- 聲明了很多全局,內存回收不容易判斷并回收
- DOM 元素綁定