在我开始编程职业生涯的前几年时间里,我很喜欢看编程书籍。
有一段时间我在看一本叫《软件随想录》的书,作者是美国的一个资深程序员。里面有一篇文章,专门讲闭包的。这篇文章有一段很简单的示例代码。就是在A函数的函数体里面写了一个匿名的B函数。这在 JavaScript 里面是很常见的一种做法,因为用 JavaScript 做网络请求的时候很多回调函数都是这么做的。作者说这段代码里面使用了闭包,是 JavaScript 这门语言里面他非常欣赏的功能。但是对于我来说,这样的代码太常见了,一时半会看不出来它有什么特别的。作者的意思是说,本来A函数里面有一个变量在B函数里面是不能访问的,因为它们是不同的作用域,因为有了闭包这个功能,它才能在B函数里面访问。我觉得一般人看到这段代码的时候是不容易察觉A函数和B函数是两个不同的作用域的,因为B函数就写在A函数的函数体里面,从直觉上就会觉得A函数里面声明的变量是可以在B函数里面使用的。也就是说,就书上的这段示例代码而言,支持闭包才是符合直觉的,看上去就是自然而然的,不会觉得使用了什么特别的功能。
(待续)