预置知识:
普通类型包括: number,string,boolean,symbol,null,undefined;
复杂类型包括:object;
内存:
- 一个 8G 内存条
- 操作系统开机占用 0.5G
- chorme 打开即占用 1 G
- 这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
- JS 引擎将内存分为代码区和数据区
- 数据 区分为 Stack (栈内存)和 Heap(堆内存)
- 简单的数据类型直接存在 Stack 里
- 复杂的数据类型是把 Heap 地址存在 Stack 里
什么意思呢?请看代码
问题解析
1. 问题一
var a = 1var b = ab = 2// a = ?答案是 a = 1,这个相信大家都能理解
2. 问题二var a = {name: 'a'}var b = ab.name = 'b'// 请问 a.name 现在是多少?
答案是 'b'
为什么呢,因为浏览器把 a.name 的值存为一个地址,而 b.name 也指向这同一个地址,修改了地址里面的内容。
3. 问题三
var a = {name: 'a'}var b = ab = null// 请问 a.name 现在是多少?答案是 a ,因为 类型为 null 的值,不管后面存什么都为 null
垃圾回收
如果一个对象没有被引用,它就是垃圾,将被回收
深拷贝和浅拷贝
var a = 1
var b = a
b = 2
a = 1
b 变化了没影响 a, 为深拷贝;
var a = {name:'a'}
var b = a
b.name = 'b'
a.name = 'b'
反之,b 变化了导致 a 变化 , 为浅拷贝。