闭包学习笔记

Posted by 薛纪昌 on August 24, 2018

最近在看JavaScript高级程序设计,这本书真的不错,这里面的讲解对我这个初学者而言十分受用。

之前也在学习闭包,上网查了很多资料,看了很多博客,还是不太懂。在看这本书的闭包章节之前,我都还不知道闭包究竟是什么东西。

下面说说我的理解。

匿名函数和闭包

闭包和匿名函数是一个东西吗?之前我一直以为匿名函数就是闭包,其实不然。

在书中看到队闭包的解释,只有一句话:

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

首先,闭包是一个函数。

其次,它能够访问另一个函数作用域中的变量。

这时候我们都会想到在一个函数(A)中嵌套另一个函数(B),B就在A的作用域中,B就可以访问到A作用域中的变量,那么B就是一个闭包。

下面有一个的例子,摘自书中

function createComparisonFunction(propertyName){
	return function (object1, object2){
		var value1 = object1[propertyName];
		var value2 = object2[propertyName];
		
		if(value1 < value2){
			return -1;
		}else if(value1 > value2){
			return 1;
		}else{
			return 0;
		}
	}
}

createComparisonFunction中有一个匿名函数,该匿名函数可以访问到createComparisonFunction的参数propertyName,当createComparisonFunction方法被调用时,

会返回一个函数,然后createComparisonFunction被GC回收,但是createComparisonFunction中的propertyName变量没有被销毁,依然可以在匿名函数中使用!