网站欢迎页模板本地推广最有效的方法
闭包
一个函数嵌套了另一个函数,内部函数引用了外部函数的变量,这样,当外部函数在执行环境中执行完毕后,因为某个变量被引用就无法被GC回收,导致这个变量会一直保持在内存中不能被释放。因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!
应用场景:
想要保存某个变量:比如循环给多个li元素绑定点击事件,使被点击时弹出li的index值或者将某函数中的变量i一直存在于内存中,每次执行点击,都会给i自加1
function a(){var n = 0;function inc() {n++;console.log(n);}inc(); inc();
}
a(); //控制台输出1,再输出2
function a(){var n = 0;this.inc = function () {n++; console.log(n);};
}
var c = new a();
c.inc(); //控制台输出1
c.inc(); //控制台输出2
function a(){var n = 0;function inc(){n++; console.log(n);}return inc;
}
var c = a();
c(); //控制台输出1
c(); //控制台输出2
Javascript的垃圾回收机制
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。