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