04 V8 底层运行机制之执行上下文及堆栈内存
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. 把空间地址放到栈中存储,以此来供变量引用代码画图分析一
js
var a = 12
var b = a
b = 13
console.log(a)代码画图分析二
js
var a = {
n: 12
}
var b = a
b['n'] = 13
console.log(a.n)代码画图分析三
js
var a = {
n: 1
}
var b = a
a.x = a = {
n: 2
}
console.log(a.x)
console.log(b)