js中的内存分为堆内存和栈内存: + 堆内存(heap):存储引用数据类型值(对象:键值对,函数:代码字符串) + 栈内存(stack):提供js代码执行的环境和存储基本类型值
堆内存释放: 让所有引用堆内存空间的变量赋值为null即可(没有变量占用这个堆内存了浏览器会在空闲的时候把它释放掉) 栈内存释放: 一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉(在栈内存中存储的值也都会释放掉)但是也有特殊不销毁的情况: + 函数执行完,当前形成的栈内存中,某些内容被栈内存以外的变量占用了,此时栈内存不能释放(一旦释放外面找不到原有的内容了) + 全局栈内存只有在页面关闭的时候才会被释放掉 如果当前栈内存没有被释放,那么之前在栈内存中存储的基本值也不会被释放,能够一直保存下来
- 知识点1:等号赋值的处理
let a = 0;
// 1、创建变量(没有赋值,默认为undefined) => a
// 2、创建值 => 0
// 3、关联 => 把变量a与值0关联(指针)【一个变量只能关联一个值】
- 知识点2:alert()的结果都要toString()。如何证明?见下:
alert({ name: 'abc' }); // [object Object]
例子1:
let a = 0;
let b = a;
b++;
alert(a); // "0"
例子2:
let o = {};
o.a = 0;
let b = o;
b.a = 10;
alert(o.a); // "10"
例子3:
let a = {
n: 1
};
let b = a;
a.x = a = {
n: 2
};
console.log(a.x); // undefined
console.log(b); // { n: 1, { n: 2 } }