Javascript内存结构分析
/ / 点击 /虽然很少触及,但是网页也是有内存上限的,当 html
、javascript
等数据大小超过上限时,浏览器可能会闪退或停止响应。本文将介绍网页的内存结构、Javascript 垃圾回收机制以及函数闭包。
网页内存结构:堆 + 栈 + 池
- 池:存放常量
- 栈:存放定义的变量和函数
- 堆:存放对象(new)
1 | // str存放在栈中,"hello world"存放在常量池中,str只是一个饮用 |
案例分析
1 | str1 = "hello"; |
Javascript垃圾回收机制
str3
为一个对象引用,当 str3
赋值为其他值的时候,原本的对象会被自动清除。
清除原理:垃圾回收器定期巡视堆中所有对象,当发现对象没人引用时,就清除。
也就是说,对象清除不是实时的,而是需要等待一定时间的。
函数闭包
函数在调用之前只存在栈中,只要一调用就会在堆中创建一个闭包空间,执行完成后就被回收。
闭包空间中在使用变量时,优先使用闭包空间中的变量,不管是在之前还是之后调用。如果在闭包空间中没有找到,则直接找全局变量,而不是父函数变量。
1 | var num1 = 10; |
1 | var num1 = 10; |
全文完。