惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
博客园 - 【当耐特】
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理

博客园 - 悉野

go编译期接口断言 / 编译期接口检查(compile-time interface assertion / compile-time interface check) Go 的类型断言 ssh连结vmware中ubuntu的共享文件夹 spring加载冲突问题 spring一个错误修正 抓安卓日记到文件 注册表删除桌面顽固图标 github买的账号无法拉取代码的解决方法 apk常用命令 java服务器异常处理 ES6 学习难度分层 promise原理 材质, 纹理, shader之间的关系 TCP与UDP区别 javascript中=>与function的区别 cocos使用fgui 几种服务注册与发现的区别 mybatis测试 向量点乘与叉乘 unity画布3种渲染模式 go学习笔记10(HTTP) go学习笔记9(TCP) go学习笔记8(反射) c++简单的线程池 operator new 是 C++ 动态内存分配的核心函数,负责分配原始内存,不调用构造函数 C++的定位放置new(Placement new) go学习笔记7(泛型,文件读写,测试) go学习笔记6(协程与channel,select使用,线程安全,异常处理) go学习笔记5(函数,结构体,自定义类型和类别名,接口) go学习笔记4(数组与切片,map,if,switch,for循环)
javascript中函数解析过程
悉野 · 2026-05-08 · via 博客园 - 悉野

a.b查找是有b,  先从Hidden Class查找(fast Path),  找到的话, 使用偏移来值, 找不到退化为(slow Path), 使用map查找

JSObject a
├─ Map* ──────────────► MapA
│                ├─ instance_size
│                ├─ descriptor_array
│                │ ├─ x @ offset 0
│                │ └─ y @ offset 1
│                └─ transition
│                └─ "z" → MapB

└─ properties[0] = 1
  properties[1] = 2

Map 是“结构描述”

properties 是“值数组”

从map中拿到offset, 然后再拿值

fast Path:

map = a->map();
desc = map->descriptor_array["b"];
offset = desc->field_index();
value = a->properties[offset];

slow Path:

dict = a->property_dictionary();
entry = dict->Find("b"); // hash

对比项

数组

链表

Hidden Class

连续内存

✅(descriptor)

动态增长

✅(transition)

查找速度

O(1)

O(n)

O(1)

结构变化

是否存值