JS里的内存机制

数据的存储方式

JS引擎将内存分为代码区和数据区,其中,数据区分为 Stack(栈内存) 和 Heap(堆内存)。简单类型的数据直接存在 Stack 里,复杂类型的数据是把 Heap 地址存在 Stack 里。

垃圾回收

当我们申明变量、函数、对象的时候,系统会自动为他们分配内存。而当一个变量、函数、对象不再被引用时,他们就是垃圾,将被回收。

内存泄漏

由于一些浏览器的bug,使本应被标记为垃圾的数据没有被标记为垃圾,内存会被永久占用。

解决方法是将页面关闭前将所有内容置为null

window.onunload = function(){
  document.body.onclick = null;
}

关于内存的题目

var a = 1
var b = a
b = 2
请问 a 显示是几?  

此时a的值不受b影响,所以
a === 1
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?

此时,b指向一个新的对象,a值不受影响,所以
a.name === 'a'
var a = {name: 'a'}
var b = a
b.name === 'b'
请问现在 a.name 是多少?

此时,a,b指向的对象中name的值改变,所以
a.name = 'b'
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?

此时,a值不受影响,所以
a === {name: 'a'}
var a = {n:1};  
var b = a; 
a.x = a = {n:2};  

此时 a.x 中的 a 指的仍是之前的地址,而 a = {n:2}中的 a 指的是新的地址

alert(a.x);
alert(b.x);

所以
a.x === undefined
b.x === { n: 2 } 

你可能感兴趣的:(JS里的内存机制)