javascript中闭包到底是什么?
PHPz
PHPz 2017-04-11 09:11:33
[JavaScript讨论组]

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

PHPz
PHPz

学习是最好的投资!

全部回复(6)
黄舟

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

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

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

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

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

PHP中文网

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

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

我的js闭包笔记

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

迷茫

可以去知乎搜一下,定能明白。

黄舟

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

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

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

自运行函数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号