第一个是声明过程var：遇到有var的作用域，在任何语句执行器都已经完成了声明和初始化，也就是变量提升并且拿到undefined的原因。let：解析器进入一个块级作用域，发现let关键字，变量只是先完成声明，并没有到初始化那一步。如果此时在作用域提前访问会报错 xx is not defined，这就是暂时性死区的由来。等到解析到有let那一行时，才会进入初始化阶段。如果let那一行是赋值操作，则初始化和赋值同时进行。const和let一样。第二个是内存分配var：会直接在栈内存里预分配内存空间，然后等到实际语句执行时，再存储对应的变量，如果传的是引用类型，则在堆内存里开辟一个内存空间存储实际内容，栈内存会存储一个指向堆内存的指针let：不会在栈内存里预分配内存空间，而且在栈内存分配变量的时候，会检查，如果有相同变量名存在就会报错const：不会分预配内存空间，栈内存分配变量时也会做同样的检测。const存储的变量是不可修改的，所以对于基本类型来说无法修改定义的值，对于引用类型来说无法修改栈内存里分配的指针，但是可以修改指针指向的对象里面的属性第三个是变量提升let只是创建过程中提升，初始化过程并没有提升，所以会产生暂时性死区。var的创建和初始化过程都提升了，所以赋值前访问会得到undefined
1.DNS域名解析： 将url中的域名解析成ip地址2.TCP三次握手： 建立安全的网络传输协议2.1 什么是TCP : 一种 传输控制协议2.2 TCP作用 : 保证HTTP网络传输是 安全 + 可靠的 （检测客户端 与 服务器的网卡是不是通的）2.3 TCP三次握手 : ​ 第一次: 浏览器 -> 服务器 (你能听到我说话吗?,检测浏览器:发送)​ 第二次: 服务器 -> 浏览器 (我听到了,你能听到我说话吗。 检测浏服务器: 接收 + 发送)​ 第三次: 浏览器 -> 服务器 (嗯,我听到了. 检测浏览器: 接收)3.HTTP建立连接3.1 客户端发送请求3.2 服务器处理请求3.3 服务器响应请求4.渲染引擎开始渲染响应返回的HTML文本4.1 解析html生成：dom树4.2 解析css生成：样式树4.3 dom树 与 样式树 合并得到 渲染树4.4 呈现页面