美文网首页工作生活
简单理解闭包

简单理解闭包

作者: 没有卢果 | 来源:发表于2019-07-01 20:31 被阅读0次

    当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。

    在 Javascript 中,如果一个对象不再被引用,那么这个对象就会被回收,否则这个对象一直会保存在内存中。
    当我们需要在模块中定义一些变量,并希望这些变量一直保存在内存中但又不会 “污染” 全局的变量时,就可以用闭包来定义这个模块。

    闭包的问题让变量得不到释放,增加内存使用率,造成内存泄漏;

    闭包的使用场景:
    • 使用场景一: 给对象设置私有变量并且利用特权方法去访问私有属性

    • 使用场景二: 采用函数引用方式的setTimeout调用
      setTimeout: 接收两个参数,第一个参数可以是一段js代码,亦可以是一个函数,第二个参数是我们延迟执行第一个参数的时间(实际上不是延迟执行,而是延迟加入执行队列),在此我们要讨论的情况是第一个参数是一个函数的情况,我们传入的参数实际上是函数对象的引用,那这时候就不能向函数传参了,那么闭包就派上用场了

    • 使用场景三: 封装相关功能集
      一个内联执行的函数表达式返回了内部函数对象的一个引用。并且分配了一个全局变量,让它可以被作为一个全局函数来调用。而缓冲数组作为一个局部变量被定义在外部函数表达式中。它没有被扩展到全局命名空间中,并且无论函数什么时候使用它都不需要被再次创建。

    相关文章

      网友评论

        本文标题:简单理解闭包

        本文链接:https://www.haomeiwen.com/subject/lynncctx.html