js闭包的理解

任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量 (变量的作用域)

1.当在函数内部定义了其他函数时,就创建了闭包。 闭包是一个函数,闭包会携带包含它的函数的作用域

例子:

a函数内进行return 另一个b函数,被包含的b函数因为作用域链拿到了上级a函数作用域的私有变量,当在外部调用a函数并且执行a函数的返回值b函数时,也就能在外部顺利拿到了a函数中作用域的私有变量。
当a函数执行完后里面的活动对象不会销毁,因为b函数还在引用a函数作用域上的活动对象。直到b函数销毁后,里面的活动对象才被销毁。

2.在后台执行环境中,闭包的作用域链包含着它自己的作用域、包含函数的作用域和全局作用域。

3.通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。
但是,当函数返回了一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。

闭包的作用:

1.可以使用自执行函数与函数的结合全新的闭包作用域
2.生成全新的私有作用域,保护函数内的变量安全。使用闭包的私有作用域代替全局变量,防止全局污染
3.在es5可以隔离 for循环中的var i变量的作用域
4.在内存中维持一个变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是闭包 通俗的来讲,个人觉得闭包就是延长变量作用域的函数。众所周知js的作用域分为全局作用域和链式作用域。在函...
    AcientFish阅读 336评论 0 3
  • 作者:xiaotie , 集异璧实验室(GEBLAB)出处:http://www.cnblogs.com/xiao...
    新晋小牛牛阅读 303评论 0 0
  • 闭包: 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该...
    小裁缝sun阅读 751评论 0 5
  • 11、数据类型检测与toString方法的理解 1,typeof value (检测一个值的类型:原始类型或者引用...
    萌妹撒阅读 962评论 0 0
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zouCode阅读 1,385评论 0 13

友情链接更多精彩内容