• #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.

  • 相关阅读:
    要开学了,暂时停更
    day13 IP包头分析 | 路由器原理 1
    day12 数据链路层 | 交换机基本命令
    day11 OSI与TCP-IP 5层协议 | 物理层相关知识
    day10 扫描与爆破
    day 09 简单渗透测试
    day07 PKI
    day07 域
    day06 WEB服务器 | FTP服务器
    day05 DHCP部署与安全 | DNS部署与安全
  • 原文地址:https://www.cnblogs.com/shanjinghao/p/12927550.html
Copyright © 2020-2023  润新知