1 操作系统常识
-
只有放在内存中的东西才能运行;
-
JS是单线程的,因为每个进程内都会开一个渲染引擎(线程)和JS引擎(线程),线程内不能再开线程;
-
JS引擎想要修改样式,要通过跨线程通信,通知渲染引擎;
-
因为要跨线程,所以DOM操作比JS内部操作慢;
2 开机过程
3 JS引擎
- Chrome用的是V8引擎,C++编写(快,性能好);Node.js用的是V8引擎;
-
JS的数字是64位的;
-
指向是虚指的,指向或引用的意思就是保存地址;
- window是浏览器提供的,document/console/Object/Array/Function都是挂在window上的(因为方便,挂在window上的东西可以在任何地方直接用);
4 内存
4.1 内存示意图
4.2 JS引擎部分区域示意图
- 数字、布尔、字符串不是对象,其它的都是对象;
4.2 篡改对象
- 一层可改:
p2.name='x'
p.name也会变为 x
- 篡改对象时,一层可以直接改,两层不行,需要通过隐藏属性__proto__来改;
obj.tostring='xxx'
obj2.tosstring不会变为xxx,依然存放地址;
4.3 window的内存示意图
4.4 关于window
这样就可用x取代window,例如:用$代替Jquery;
- console.dir(window.Object) :打印出Object的结构;
5 原型链
-
属性名首字母大写的,一般有prototype,如:Object、Array;
-
xxx.prototype存储了xxx对象的共同属性,这些共同属性就是原型;
-
有了原型,可以不需要重复声明共有属性,这样可以省代码、省内存;
-
每个对象都有一个隐藏属性__proto__,指向原型(对象**);**
-
prototype和__proto__的区别: