JS-2:内存

152 阅读1分钟

1 操作系统常识

  • 只有放在内存中的东西才能运行;

  • JS是单线程的,因为每个进程内都会开一个渲染引擎(线程)和JS引擎(线程),线程内不能再开线程;

  • JS引擎想要修改样式,要通过跨线程通信,通知渲染引擎;

  • 因为要跨线程,所以DOM操作比JS内部操作慢;

2 开机过程

image.png

image.png

3 JS引擎

  • Chrome用的是V8引擎,C++编写(快,性能好);Node.js用的是V8引擎;

image.png

  • JS的数字是64位的;

  • 指向是虚指的,指向或引用的意思就是保存地址;

image.png

  • window是浏览器提供的,document/console/Object/Array/Function都是挂在window上的(因为方便,挂在window上的东西可以在任何地方直接用);

4 内存

4.1 内存示意图

image.png

4.2 JS引擎部分区域示意图

image.png

image.png

  • 数字、布尔、字符串不是对象,其它的都是对象;

4.2 篡改对象

  • 一层可改: p2.name='x'

p.name也会变为 x image.png

  • 篡改对象时,一层可以直接改,两层不行,需要通过隐藏属性__proto__来改; obj.tostring='xxx'

obj2.tosstring不会变为xxx,依然存放地址;

image.png

4.3 window的内存示意图

image.png

4.4 关于window

image.png

image.png

这样就可用x取代window,例如:用$代替Jquery;

  • console.dir(window.Object) :打印出Object的结构;

5 原型链

  • 属性名首字母大写的,一般有prototype,如:Object、Array;

  • xxx.prototype存储了xxx对象的共同属性,这些共同属性就是原型;

  • 有了原型,可以不需要重复声明共有属性,这样可以省代码、省内存;

  • 每个对象都有一个隐藏属性__proto__,指向原型(对象**);**

  • prototype和__proto__的区别:

image.png