javascript中闭包到底是什么?

在学习JS的时候一直听到别人说闭包闭包,自己也尝试着去看书,找资料,但是很多讲解的比较抽象,说实话,我看不懂。
所以想问下闭包到底是什么,是一个名词还是一个动词,还是一个过程。希望各位大大用一种比较浅显易懂的说法讲解下。

阅读 5k
6 个回答

不要对闭包心存畏惧,闭包只是函数的一个子集。只要你懂函数,你就能懂闭包。

函数的特殊性就在于,它不只是一个简单的数据(集合),它实现的是处理数据的功能。

普通的定义在全局中的函数总是存在局限:无法获取局部作用域中的变量。这时,闭包就体现出其天然的优势:定义在局部作用域中,但不需要在局部作用域中立即调用得到结果,而是在全局作用域中(严格的说,是在闭包作为值返回到全局作用域之后)随时调用。

个人认为,闭包存在的最大意义是使函数更为灵活。而自运行函数,创建私有变量等只是它的衍生作用罢了。

闭包闭包!也许能帮助你理解 :)

在js里,由于作用域链的关系,只有子函数可以读取父函数里的变量,不能反过来。同级的函数之间也不可以互相读取内部变量。

而闭包简单来说就是可以读取其他函数内部变量的函数。只要满足这一点的函数,都可以叫闭包。

我的js闭包笔记

初学的话,建议多动手写些代码,运行几次,看看效果。理解就会容易很多。

  1. 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使是函数在当前词法作用域之外执行。 --<<你不知道的js上卷>>

      一般函数执行后,整个函数的内部作用域会被销毁(垃圾回收),
      这是因为js引擎认为该函数不会再被使用,所以去回收。
      当拥有内部作用域的函数,在作用域之外时就会形成闭包,阻止了回收释放。
    
新手上路,请多包涵

闭包就是自带变量的函数。从一个角度上讲你可以把它想象成为类。

自运行函数。

推荐问题
宣传栏