讲讲什么是闭包?闭包的用途是什么?闭包的缺点是什么?

170 阅读1分钟

什么是闭包

  • 在《你不知道的JavaScript》中是这样描述的:

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。闭包是一种现象,不用为了利用闭包而特意创建,因为在代码中随处可见。

  • 函数嵌套函数

  • 内部函数使用外部函数的参数和变量

  • 参数和变量不会被当垃圾回收机制回收

  • 栗子

function fn1() {
	var name = 'iceman';
	function fn2() {
		console.log(name);
	}
	fn2();
}
fn1();

上面的代码已经产生了闭包,fn2访问到了fn1的变量

  • fn2的词法作用域能访问fn1的作用域
  • 将fn2当做一个值返回
  • fn1执行后,将fn2的引用赋值给fn3
  • 执行fn3,输出了变量name

闭包的好处

  • 你希望有一个变量长期保存内存中
  • 避免全局变量污染

闭包的缺点

  • 常驻内存,增加内存的使用量
  • 使用不当造成内存的泄露