堆栈底层机制
思考:
1. let a = 1; 2. let n = {name: "xxx"};
let b = a; let m = n;
b = 2; m = {name: "xxxxxx"};
console.log(a) console.log(n)
浏览器执行代码
步骤
- 从电脑内存中分配出一块内存,用来执行代码,称:栈内存(stack)
- 分配一个主线程用来自上而下执行js代码
图解思考1
- 创建变量a,放到当前栈内存变量储存空间中
- 创建一个值1,并把他储存到当前值储存空间中(简单的基本类型值就是这样直接储存,引用其他复杂的类型就不能直接储存)
- “=”为赋值的意思,其实就是让变量和值相互关联的过程
上述第一题console.log(a) // => 1
图解2
- 创建一个变量n,并在栈内存之外创建一个内存,用于储存引用类型值,称为堆内存(heap)=>内存中有一个16进制地址
- 把对象中的键值对(属性名:属性值)依次储存到堆内存中
- 将变量和对内存地址关联起来
- 上述第二题中,m = {name:“xxxxxx”},此时堆内存中就有两个’name‘,又因为属性名不能同名,所以name:'xxx'被name:'xxxxxx'替换
- 综上,上述第二题中console.log(n) =>name:'xxxxxx'
总结
- 基本类型:按值操作(直接操作),所以也叫作值类型
- 引用类型:操作的是堆内存的地址(按引用地址操作)