知识理解 - 闭包

120 阅读1分钟

1. 什么是闭包

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

2. 如何创建一个闭包

最常见的方式,就是在一个函数内部创建另一个函数,并返回该函数。

举一个简单的例子:

function fn1() {
  var a = 1;
  function fn2() {
    a++;
    console.log(a);
  }
  return fn2;
}
var fn3 = fn1();
fn3();

最后输出

2

在这里,fn2可以访问fn1的作用域,将fn2作为返回值。fn1执行后,将fn2的引用赋值给fn3,执行fn3,输出变量a。

这里fn3函数访问了fn1函数里的变量a,所以形成了一个闭包。

3. 为什么要用闭包

闭包的主要作用是:

  • 读取函数内部的私有变量。
  • 防止对全局作用域的污染。

4. 闭包的注意事项

  • 通常,函数的作用域及其所有变量都会在函数执行结束后被销毁,由于闭包会使得函数中的变量都被保存在内存中,过度使用闭包会导致内存占用过多。

5. 闭包的应用

闭包的应用比较典型是定义模块,我们将操作函数暴露给外部,而细节隐藏在模块内部。

例如:

function module() {
    var arr = [];
	function add(val) {
		if (typeof val == 'number') {
			arr.push(val);
		}
	}
	function get(index) {
		if (index < arr.length) {
			return arr[index]
		} else {
			return null;
		}
	}
	return {
		add: add,
		get: get
	}
}
var mod1 = module();
mod1.add(1);
mod1.add(2);
mod1.add('xxx');
console.log(mod1.get(1));

最后输出

2



参考文章: