saber酱的抱枕

Fly me to the moon

04/19
11:24
学习

JavaScript的闭包

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

不用闭包的话,在函数外操作函数内的局部变量是不行的,因为局部变量的作用域只在函数内。我们可以通过闭包解决这个问题。

创建闭包的常见方式,就是在一个函数内部创建另一个函数,这样,被创建的函数就可以访问这部分作用域。

从形式上来说,给外部变量返回一个function,就形成了一个闭包。

function b() {
	var a=1;
	return function () {
		console.log(a);
	};
}
var c=b();

c(); // 1

上面代码是给外部变量c赋值了一个函数,可以输出函数b里面的变量a。

除了用return创建函数,我们也可以直接赋值。

如下代码,函数内有一个局部变量a,我们通过闭包,可以在函数外设置和读取a的值。

var set,get;

(function () {
	var a=0;
	set=function (s) {
		a=s;
		console.log(a);
	};
	get=function () {
		console.log(a);
	};
})();

set(2);
get();

使用闭包需要注意的问题有:
内存占用增加
this的指向。

JavaScript的闭包