闭包

78 阅读1分钟
闭包

闭包是指有权访问另一个函数作用域中的变量的函数

  • 一个函数里面嵌套另外一个函数。嵌套(内部)函数对其容器(外部)函数是私有的。它自身就形成了一个闭包。
  • 一个闭包是一个可以自己拥有独立的环境与变量的的表达式(通常是函数,因为ES6有了块级作用域的概念)。
 function t2() {
			var b = 100;
			function t3() {
				return ++b
			}
			return t3;
		}
		var t4 = t2()       //  函数t2 被赋给了变量 t4 t4是个全局变量 不会被销毁  所以相当于 t3 不会销毁 也会存在
		console.log(t4()) //101
		console.log(t4())  //102

解释:t2在赋给 t4 之前 t2被执行一次(因为't2()'),在t2中 返回t3 而t3在t2中相当于全局作用域 ,形成闭包,t4是个全局变量 不会被销毁,所以相当于t3不会销毁,也会存在,最终对于b的引用一直存在

js垃圾回收
  • 在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
  • 如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。
闭包好处
  • 希望一个变量长期驻扎在内存中
  • 避免全局变量的污染
  • 私有成员的存在