zoukankan      html  css  js  c++  java
  • #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.

  • 相关阅读:
    感悟优化——Netty对JDK缓冲区的内存池零拷贝改造
    由浅入深理解Java线程池及线程池的如何使用
    Http学习笔记
    zookeeper集群配置详细教程
    kafka学习笔记——基本概念与安装
    干货——详解Java中的关键字
    Java基础巩固——排序
    你可以这么理解五种I/O模型
    Java中的NIO基础知识
    Java基础巩固——异常
  • 原文地址:https://www.cnblogs.com/shanjinghao/p/12927550.html
Copyright © 2011-2022 走看看