重学javascript笔记
一.浏览器垃圾回收机制。
堆内存清理机制
谷歌浏览器会定时清理没被占用的变量,IE和火狐是引用计数的形式;这是;浏览器自动行为。下面是手动释放内存解释,手动释放内存就是把不常用的变量赋值为null即可。 图示:
var obj = {name:'feiwu',age:25},
var obj1 = obj
栈内存清理机制
1)全局作用域
只有当页面关闭的时候全局作用域才会被清理。
2)私有作用域(只有函数执行才会产生私有作用域)
一般情况下只有函数执行才会形成一个私有作用域,当私有作用域中的代码执行完毕之后,我当前作用域都会主动的进行释放和销毁
注意:如果当前作用域的内部变量被外部占用就不会自动销毁
1)函数执行返回了一个引用数据类型的值,并且在函数的外部被一个其他东西给接收了,这种情况下一般形成的私有作用域都不会被销毁。(不立即销毁)
function fn(){
var num = 100;
return function(){
}
}
var f = fn() //fn执行形成的这个私有的作用域就不能再销毁了
2)通过DOM方法获取的元素或者元素集合都是对象类型的值,当自执行函数中存在DOM获取的元素上有绑定了点击事件的时候也不会被销毁
3)函数返回之后没被其他东西占用,但还是需要执行一次,所以暂时不销毁,当返回值执行完后,浏览器会在空闲的时候将其销毁。下述情况:
function fn(){
var num = 100;
return function(){}
}
fn()()