在学习JS的时候一直听到别人说闭包闭包,自己也尝试着去看书,找资料,但是很多讲解的比较抽象,说实话,我看不懂。
所以想问下闭包到底是什么,是一个名词还是一个动词,还是一个过程。希望各位大大用一种比较浅显易懂的说法讲解下。
在学习JS的时候一直听到别人说闭包闭包,自己也尝试着去看书,找资料,但是很多讲解的比较抽象,说实话,我看不懂。
所以想问下闭包到底是什么,是一个名词还是一个动词,还是一个过程。希望各位大大用一种比较浅显易懂的说法讲解下。
在js里,由于作用域链的关系,只有子函数可以读取父函数里的变量,不能反过来。同级的函数之间也不可以互相读取内部变量。
而闭包简单来说就是可以读取其他函数内部变量的函数。只要满足这一点的函数,都可以叫闭包。
初学的话,建议多动手写些代码,运行几次,看看效果。理解就会容易很多。
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使是函数在当前词法作用域之外执行。 --<<你不知道的js上卷>>
一般函数执行后,整个函数的内部作用域会被销毁(垃圾回收),
这是因为js引擎认为该函数不会再被使用,所以去回收。
当拥有内部作用域的函数,在作用域之外时就会形成闭包,阻止了回收释放。
8 回答4.5k 阅读✓ 已解决
6 回答3k 阅读✓ 已解决
5 回答2.6k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
不要对闭包心存畏惧,闭包只是函数的一个子集。只要你懂函数,你就能懂闭包。
函数的特殊性就在于,它不只是一个简单的数据(集合),它实现的是处理数据的功能。
普通的定义在全局中的函数总是存在局限:无法获取局部作用域中的变量。这时,闭包就体现出其天然的优势:定义在局部作用域中,但不需要在局部作用域中立即调用得到结果,而是在全局作用域中(严格的说,是在闭包作为值返回到全局作用域之后)随时调用。
个人认为,闭包存在的最大意义是使函数更为灵活。而自运行函数,创建私有变量等只是它的衍生作用罢了。
闭包闭包!也许能帮助你理解 :)