# 04 V8底层运行机制之执行上下文及堆栈内存 **Published by:** [xukai](https://paragraph.com/@xulai/) **Published on:** 2021-12-06 **URL:** https://paragraph.com/@xulai/04-v8 ## Content JS代码运行的环境+ 浏览器 -> webkit内核(V8)、Trident、Gecko、Blink... + Node -> webkit内核 + webview「Hybrid混合APP开发」 -> webkit内核 + ... 专业名词含义ECStack(Execute Context Stack) 执行环境栈「栈内存」 + 作用1:供代码执行 + 作用2:存储原始值和变量 EC(G) (Execute Context Global) 全局执行上下文 + 目的:区分代码执行的环境 + 全局代码都会在全局上下文中执行 VO(G) (Variable Object) 变量对象(全局执行上下文中的变量对象) + 存储当前上下文中的声明的变量 GO(Global Object) 全局对象(存储浏览器内置的API) 内存内存分为:栈内存Stack 堆内存Heap + 内存条中分配出来的运行内存 + 前端性能优化:内存优化 = 赋值操作1. 创建一个值(原始值 & 对象) + 原始值:在栈内存中找个位置存储起来 + 对象:单独开辟一个堆内存空间,用来存储对象中的成员信息 2. 声明变量 Declare,把声明的变量存储到当前上下文的”变量对象中VO/AO“(var/function/let/const/import) 3. 让变量和创建的值关联起来 对象类型「非函数」赋值操作1. 开辟一个堆内存空间「在堆内存中开辟一块单独的空间」 -> 会提供一个公访问的地址「16进制」 2. 把对象中的键值对一次存储到空间中 3. 把空间地址放到栈中存储,以此来供变量引用 代码画图分析一var a = 12; var b = a; b = 13; console.log(a); 代码画图分析二var a = { n: 12 }; var b = a; b['n'] = 13; console.log(a.n); 代码画图分析三var a = { n: 1 }; var b = a; a.x = a = { n: 2 }; console.log(a.x); console.log(b); ## Publication Information - [xukai](https://paragraph.com/@xulai/): Publication homepage - [All Posts](https://paragraph.com/@xulai/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@xulai): Subscribe to updates - [Twitter](https://twitter.com/onev_xu): Follow on Twitter