7.1 开机的过程
通电 --> 读取固件, 读取里面的开机程序 --> 开机程序将操作系统加载到内存
加载操作系统内核 --> 启动初始化进程(pid=1) --> 启动系统服务: 文件, 安全, 联网 --> 用户登陆 --> 启动shell
浏览器输入地址然后发生了什么?
下载HTML, 解析HTML, 下载CSS, 解析CSS, 渲染页面, 下载载入js, 执行js.(边解析HTML, 边下载CSS也是可以的)
为什么说Dom操作慢?
页面是进程, 渲染引擎是线程, Dom操作是跨线程操作,所以很慢.
7.2 JS引擎
v8引擎编写的语言是 c++, 所以非常的快
引擎功能:
- 编译
- 优化代码, (在引擎层面做代码优化的话,过于优秀). 所以: 优化技巧跟着v8引擎建议走
- 执行字节码,机器码
- 垃圾回收.
7.3 执行js之前的准备
执行js代码前, 浏览器要干什么?
-
提供浏览器提供给js的api(运行环境), 包括
window/document/setTimeout等 -
js放进页面就开始运行
js代码放进内存
不知道区存变量名, 非对象存Stack区, 对象数据存Heap区((但是会放一个地址在stack))
7.4 JS入门三座大山之原型
window是什么?
console, document, Object, Array, Function挂到window- window 公交车, 谁都可以挂, 在任何地方都能直接使用(相当于全局变量).
- window的属性存的是地址.
- 变量指地址, 对象是数据, window变量,window对象也不例外
Tips:
console.dir()打印结构
压在JS学习者身上的三座大山是什么?
三座大山:
- this
- 原型
- AJAX
原型是啥?
原型: 就是共有属性, 能省内存.也就是下面的__proto__
Tips: Object也有隐藏属性
prototype 和__proto__的区别是什么?
-
首字母大写的对象:才有 有prototype属性, 不要关心
__proto__ -
小写才关心: `proto
空对象有一个隐藏属性fuck, 指向Object.prototype #409, 数组指向:Array.prototype##9527, 包含常用的函数
能不能修改__proto__中的函数?
直接引用无法修改. 这样做只给自己增加了一个同名的属性.
var a = [1, 2, 3]
var b = a
b.push = 'xxx' //修改的不是原型, 而是给自己添加了一个push
a.push //'xxx'
var a = [1, 2, 3]
var b = [1, 2, 3]
b.push = 'xxx' //修改的也不是原型
a.push // fuction