以下来自对 coderwhy 老师 js高级课程的学习 以及自己的总结
javascript运行原理
浏览器工作原理
静态资源 输入服务器地址 url 回车
- 先查看浏览器缓存-系统缓存 若有则直接展示 or next
- DNS 解析 获取相应的 ip 地址
- TCP连接 建立 三次握手
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器收到HTTP 响应
- 读取页面内容,浏览器渲染,解析html
- 生成Dom树,解析css,样式,js交互
- 客户端和服务器继续进行交互…
浏览器内核
javascript引擎
v8引擎 Google开发 在用
浏览器内核分为两部分 一部分负责 HTML解析,布局,渲染 另一部分负责 执行javascript代码
javascript的执行过程
初始化全局对象
js引擎会在执行代码之前,在堆内存中创建一个全局对象(GO) Global Object
该对象所有的作用域都可以访问
里面会包含 Date,Array,String,Number,setTimeout.setInterval 等
在浏览器窗口中还会有一个 window属性指向自己
执行上下文栈
Execution Context Stack (ESC)执行上下文栈 用于执行代码的调用栈
全局代码 构建 一个 Global Execution Context(GEC)
放入 ESC 中 执行
在代码执行前 转换树的过程中 会将 全局定义的变量 函数等 加入 GO 中 (作用域提示 没有值)
然后代码一行一行执行 对变量赋值 以及其他操作
函数执行
会根据函数体创建一个 函数执行上下文(Functional Execution Context)FEC 压入 EC Stack 中
在函数执行上下文中 会创建一个 Activation Object 里面包含 arguments, 函数定义 ,指向, 变量
作用域链 由VO(也就是此时的 AO对象 )和父级 也就是外层的 VO 在查找某个值的时候 逐层查找 由内到外
this 绑定的值
VO ---- variable object ----- VE — variable enviroment 就是 当时的一个 类似的 作用域