webKit底层机制上讲(底层渲染的过程)

294 阅读2分钟
  • 1.在浏览器中打开页面,浏览器引擎会渲染相关的代码(包含js代码),换句话说,会把代码自上而下执行
  • 2.浏览器想要执行代码,会提供一个供代码执行的环境,我们把这个环境叫做ECStack(执行环境栈 Execution Context stack)=>栈内存 Stack
    • 内存的概念: Stack 栈内存作用:供代码自上而下执行 Heep 堆内存
    • 所谓堆栈内存,其实就是在计算机内存中分配出来的一块空间,用于执行和存储代码的
  • 3.最开始执行的是全局代码,所以会行程一个EC(GLOBAL)全局执行上下文,在栈内存中执行全局的代码
  • 4.在全局的执行上下文中有一个VO(GOLBAL)全局变量对象,可以把接下来定义的变量和对应的值存储到这里面
let a = 12 
1.创建一个值12(基本类型值直接存储在栈内存中即可)
2.创建一个变量a,把其存储到vo(global)中
3.让创建的变量a和创建的值12关联在一起 => 赋值的操作
这就是定义变量的三个步骤(明确顺序)

基本数据类型(值类型):值类型由于结构相对简单,直接把值存储到“栈内存”中即可, 所以栈内存有两个作用:

  • 1.供代码执行
  • 2.存储基本类型值 引用数据类型(对象函数):引用数据类型的结构相对复杂(一个综合体,包含很多值,)不能直接存储在栈内存中,需要单独开辟空间来存储,这个空间就是“堆内存”;引用数据类型值存储在单独开辟的“堆内存”中!
  • 堆内存只有一个作用:存储引用数据类型值的
let n = {name:'哆啦A梦'}
let m = n
m.name = '大雄'  m.name = '大雄'  m先通过地址找到对应的堆内存,把堆内存中存储的name属性值进行修改,此时n.name也是被改后的‘大雄’(因为此时的m和n共用的是同一个堆内存)
1.创建值  
    + 开辟一个堆内存(Heep),每一个堆内存都有一个16进制的地址 
    + 把对象中的键值对分别存储到堆内存中
    + 把堆内存的地址放到栈内存中,用来供变量的引用
 2. 创建一个变量
 3. 让变量和之前创建堆内存的地址进行关联