对于闭包我的理解
闭包这个概念以前看过几次,不是很理解,今天在菜鸟上又看了一遍,觉得自己好像理解了。在此记下。
其实,我觉得可以把闭包理解为为了解决计数器问题的一个方法吧。
什么是计数器问题呢?就是说,我要创建一个计数器函数,这个函数每执行一次,计数器就加1。
听起来很简单。于是就有人开始写函数。写函数为了保存你执行函数的次数,自然要创建一个变量。
那么,创建一个什么变量呢?
两种选择,要么全局变量,要么局部变量。
假如我创建一个全局变量,那么函数很好写,噼里啪啦写完后,发现,咦,虽然我这个函数功能执行没问题,但是这个全局变量很容易被别人串改啊。有时候自己可能在下面写着写着就忘了自己曾经创建过这个变量,然后一不小心就把这个变量改了,计数器就失常了。
这样一来,就考虑用局部变量。但局部变量也不行。局部变量是定义在函数内部的。你每调用一次函数,变量就会重新定义一次,重新赋值一次。结果就是,你每次调用这个函数,得到的结果都是一样的。这样的计数器函数根本没有作用。
这两种变量都不行。于是就有了闭包,能够让函数拥有一个私有变量。
私有变量是什么意思呢?就是说,我这个变量,是这个函数独有的,别的任何函数都改不了它。
但是这个说法不精确。因为局部变量也是这样的,局部变量也是只有本函数才能访问,外部访问不了。
私有变量与局部变量的区别就在于,它们的生命周期不同。局部变量,在函数执行结束后,变量就被销毁了,只有等到下次函数重新执行的时候,变量才会再次被创建(似乎这么说不是很精确,原谅我只是菜鸟)。所以局部变量起不到“记忆”的功能。但私有变量的生命周期是长的。即使函数结束,私有变量依然能“记住”刚才存了些什么在里面。
这就完美解决了上面的“计数器问题”。
简而言之,“闭包”能够创建“私有变量”,是为了解决全局变量与私有变量的局限性而提出来的一种解决方案。