最近在看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变量没有被销毁,依然可以在匿名函数中使用!