浏览器底层机制

106 阅读2分钟

栈内存(ECStack):提供代码执行的环境

JS之所以能够在浏览器中运行,是因为浏览器给JS提了执行的环境

  • 浏览器会在计算机内存中分配一块内存,专门用来供代码执行的(执行环境栈)
  • 每打开一个网页都会形成一个全新的执行环境栈

堆内存: 存放东西(存放的是属性方法)

全局对象 GO(Global Object)

浏览器中会把内置的属性和方法放到一个单独的 堆内存

  • 任何堆内存都有一个内存地址(十六进制),方便后期找到这内存
  • 浏览器端会让 window指向 GO
  • Node 端会让 global 指向 GO

执行上下文(EC):代码自己执行所在的环境

  • 全局的执行上下文 EC(G)
  • 函数中的代码都会在一个单独的私有的执行上下文中处理
  • 块级执行上下文

变量对象 VO (Varibale Object)

变量对象:在当前的上下文中,用来存放创建的变量和值得地方(每一个还行上下文中都会有一个自己的变量对象)

  • 函数私有上下文中叫做 AO(Active Object)
  • AO 属于 VO 的一个分支

数据存储

  • 基本数据类型的值是存放在栈内存中的
  • 引用数据类型值是先开辟一个堆内存,把东西存储进去,然后把地址放到栈中供变量关联使用

var a = 12 是如何操作的?

所有的指针赋值都是指针的关联指向

  • 创建一个值
  • 创建一个变量
  • 让变量和值关联在一起

作用域

JS中存在多种作用域(全局、函数私有的、块级私有的)代码执行之前,首先会形成自己的执行上下文,然后把上下文进栈,进栈后,在当前上下文中再去以此执行代码