对Google V8的一点理解

背景

  1. 哪里需要JavaScript,哪里就有v8
  2. 解析JavaScript的工具
  3. 函数调用产生闭包
  4. 任何一个函数都有一个属性prototype,唯一,系统的Object也有
  5. 每一个函数的实例对象有一个属性__proto__,指向其函数的prototype,然后这个对象有个constructor在指回去
  6. 函数优先级比var高

HTML文档加载顺序

  1. 创建内存结构
  2. V8读取文档(从上到下、从左到下),产生BOM、DOM对象,BOM的范围大于DOM(document以下)
  3. V8初始化BOM和DOM树对象
  4. V8创建GO对象(预加载或者提升)
  5. 执行script脚本
  6. 事件执行script脚本

浏览器程序的内存

  1. 栈,变量,常量池的内存的地址
  2. 堆,空间最大,有一片区域,专门用户用来存放函数的,函数定义区,还有一片区域–函数缓存区
  3. 池(常量)

GO

  1. 预加载全局对象–window,全局作用域
  2. 第一步先创建GO对象
  3. 把全局声明的变量和函数声明放入到GO对象

AO

  1. 局部作用域
  2. 先创建一个AO(activation object)对象,AO{}
  3. 将函数内的所有形参和变量声明全部放入AO对象中,值为undefined
  4. AO对象有this和arguments内置对象
  5. 将形参和实参进行统一(分别进行初始化赋值)
  6. 将所有函数声明存入到AO对象中,key为函数名,整体内容作为value

GC原理

Scopes

  1. 作用域链
// 第三层(GO)
function a() {
  // 第二层(AO)
  function b() { // [[Scopes]].length === 3
    // 第一层(AO)
    var bb = 234
  }
  var aa = 123
  b()
}
var glob = 100
a()
  1. 图解
// 定义函数
function test(a, b) {
  console.log(a)
  var c = 123
  console.log(c)
  function a() {}
  console.log(b)
  var b = function c() {}
  console.log(b)
}
test(1, 3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值