内存图

内存

var n=1

对象是由基本类型组成的 数据就存在内存

0低电位 1高电位 内存必须一直通电 否则内存就消了


内存图


你买一个 8G 的内存条

操作系统开机即占用 512MB

Chrome 打开即占用 1G 内存

Chrome 各每个网页分配一定数量的内存

这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)

JS 引擎将内存分为代码区和数据区


数据区

数据区分为 Stack(栈内存)和 Heap(堆内存)

简单类型的数据直接存在 Stack 里。

复杂类型的数据是把 Heap 地址存在 Stack 里遇到问题就画图,不要分析。

浏览器 首先会进行变量提升 相当于把var a,b,c = undefined

因为  JS里的浮点数都是以64位存在的

所以  栈内存共有64位

因为  ECMAScript 规定 数字是64位 字符是16位(ES3 现在更新后也可以)

因为  后面的内容可能增加

所以  需要两个内存 stack存放Heap地址  heap存放内容

(但他们之间不存在指针 无形的连接)


引用

object存入heap里100的位置

object是对象的引用

所有变量与对象都是引用关系


ex

```javascript

var a = {name: 'a'}

var b = a

b = {name: 'b'}

请问现在 a.name 是多少?

```

```javascript

var a = {name: 'a'}

var b = a

b.name = 'b'

请问现在 a.name 是多少?

```


```javascript

var a = {name: 'a'}

var b = a

b = null

请问现在 a 是什么?

```



自我循环

var a = {self: a}

a.self

//undefined/*错误*/

因为首先它会提升变量

等同于  var a

a = {self: a}

/*此时右边a为undefined,得到一个对象self: undefined,把这个新对象的地址存到a上*/

var a = {}/*先声明一个对象a*/

a.self = a/*然后a.self就是它的地址*/

a.self.self/*总是存的是自己的地址*/



引用类型

一  先从左往右看 ==>  a.x的a地址为34

二  然后算  a={n:2}  ==>  此时a的地址为54,内容为n:2

三  a.x = ADRR54  ==>  即在34里存入x:ARR54

四  a.x即54里的x为undefined  b.x即34里的x为ARR54

你可能感兴趣的:(内存图)