#002前端基础-JS-浏览器中堆栈内存的底层处理

let a =12;
let b =a
b=13
log(a)

let a ={n:12}
let b=a
b['n']=13
log(a.n)

let a ={n:12}
let b =a
b={n:13}
log(a.n)


12 13 12



编译器把代码解析成为浏览器看得懂的结构,
  词法解析
  Ast抽象语法树
  构建出浏览器能够执行的代码,

引擎(V8/weblit内核)
  变量提升,作用域 闭包 变量对象,堆栈内存
  GO VO AO EC ECStack
  
引擎想要执行代码,一定会创建一个执行栈,
栈内存,提供一个执行上下文的环境来执行代码,
ECStack执行环境栈
EC执行环境,执行上下文,
  GO全局对象,存储全局方法,例如settimeout,在浏览器中GO赋值给了window
  VO变量对象,存储当前上下文中的变量,
  AO活动对象,为vo的一个分支,
理解为函数执行形成的变量对象,
scope作用域,创建函数时赋予的,
scopechain 作用域链

吧创建的上下文,压缩到占中执行 进站,
执行完的上下文,没有用了就会出战,
还有用的会把其压缩到栈底,=> 闭包
GO全局对象,在浏览器端会把全局对象赋值给window,

变量赋值的三个步骤,
创建变量声明,
创建值,基本值直接在赞中创建和存储即可,
变量和值关联起来,赋值,定义,defined.

由于引用值是复杂的结构,所以特殊处理,开辟一个存储对象中键值对(存储函数中的代码,)的内存空间,这个空间叫堆内存,
所有的堆内存,都有一个可被后续查找的16进制地址,
后续关联副职的时候是把堆内存地址给予变量操作的,


let x = 10,
   y = 20;
=>
let x;
let y;

let x = y = 10
=>
let x;
y;


















 

Yeah.

posted @ 2020-05-21 01:00  shanjinghao  阅读(347)  评论(0编辑  收藏  举报