浅谈闭包

闭包是什么

  • 闭包是有权访问其他函数作用域的局部变量的 一个函数(定义)
  • 由于在Js 中,变量的作用域也是函数的作用域,所以会随着函数的执行完毕 , 作用域也会被清除,内存随之被回收。但是由于闭包是建立在函数内部的子函数,因其可以访问上级函数的作用域的特性,即使函数执行完,作用域也不会随着销毁,这时的子函数---即闭包,也就拥有可以访问上级作用域中变量的权限,即使上级函数执行完,作用域也不会被销毁,内存也不会被回收。因为上级作用域依然有变量可以被访问(理解)

闭包解决了什么

  • 本质上,闭包就是把函数内部和函数外部连接起来的一座桥梁(阮一峰)
  • 由于闭包可以缓存上级作用域,使得函数外部打破了函数作用域的束缚,可以访问函数内部的变量。开发者可以不用去学习钩子函数来操作上级函数作用域内部的变量了。

闭包的好处

  • 可以读取函数内部的变量
  • 可以将函数的局部变量长久保存在内存中

闭包有哪些应用场景

Ajax请求的成功回调,事件绑定的回调 , setTimeout的延时回调,一个函数内部返回一个匿名函数等等。简而言之,无论使用何种方式对函数类型的值进行传递,当函数在别处被调用时,都有闭包的身影。

使用闭包注意什么

  • 代码难以维护: 闭包内部是可以访问上级作用域,而如果闭包时异步执行的话,就要清楚上级作用域发生了什么,这样就需要对Js的运行机制和代码的运行逻辑相当了解才行
  • 由于闭包会使函数的变量都保存在内存中,所以会占用大量的内存,从而影响网页的性能,所以不能滥用闭包(解决办法:在退出函数之前,将不再使用的局部变量全部删除)
  • 内存泄露:程序运行需要内存,对于持续运行的程序要及时释放不需要的内存,否则内存占用将越来越高,轻则影响系统高性能,重则造成程序崩溃。不用到的内存没有及时释放,就叫做内存泄漏。

想要完全掌握闭包,一定要弄清楚 函数作用域、内存回收机制、作用域继承 等

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闭包是JavaScript的重点也是难点之一,由于涉及多重知识点,对初学者来说比较难理解。本文将闭包相关的知识点进...
    萌萌加油站阅读 1,449评论 0 0
  • 闭包 闭包:函数执行后返回结果是一个内部函数,并被外部变量所引用;如果内部函数持有被执行函数作用域的变量,即形成了...
    _生生不息_阅读 1,170评论 0 0
  • 《你不知道的JavaScript》这样描述: 当函数可以记住并访问所在的词法作用域时,就产生了闭包, 即使函数是在...
    小泡_08f5阅读 1,430评论 0 0
  • js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...
    枫尘逍遥阅读 2,744评论 0 2
  • 闭包: 百度百科:官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变...
    尚有阅读 5,958评论 0 1