MOXUY

Apr 28, 2018

闭包学习笔记

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

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

下面说说我的理解。

匿名函数和闭包

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

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

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

首先,闭包是一个函数。

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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变量没有被销毁,依然可以在匿名函数中使用!

OLDER > < NEWER