zoukankan      html  css  js  c++  java
  • 闭包的理解

    概念:当一个函数的返回值是另一个函数,而返回值的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行就产生了闭包。

    闭包是一个环境,具体指的就是外部函数--高阶函数。

    说的通俗一点就是一个环境,能够读取其他函数内部的变量。

    本质上,闭包是将函数内部和函数外部连接起来的桥梁。

    用处:1·读取内部函数的变量;

        2·这些变量的值始终会保持在内存中,不会在外层函数调用后被自动清除

    优点:1·变量会一直在内存中;

          2·避免全局变量的污染;

          3·私有变量的存在;

    特性:1·函数嵌套函数;

          2·内部函数可以直接使用外部函数的局部变量;

          3·变量或参数不会被垃圾回收机制回收 GC;

    补充一下垃圾回收机制:

      在Js中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

    缺点:变量长期储存在内存中,会增大内存的使用量 使用不当会造成内存泄露

    判断闭包的3个特点:

      1·函数嵌套函数;

      2·内部函数一定操作了外部函数的局部变量;

      3·外部函数一定将内部函数返回到外部并保存在一个全局变量中;

    判断闭包的执行结果:

      1·外部函数被调用了几次就有几个受保护的局部变量的副本;

      2·来自一个闭包的函数被调用几次,受保护的局部变量就变化几次;

  • 相关阅读:
    angular 组件间数据共享
    Linux 常用命令
    angular 子路由跳转出现Navigation triggered outside Angular zone, did you forget to call ‘ngZone.run() 的问题修复
    angular :ngIf 的else用法
    利用 filter 来去重
    webpack打包时删除console.log,和debugger
    git忽略而不提交文件的3种情形
    jenkins 构建日程表配置
    vue之多页面的开发
    vue-cli3使用jq
  • 原文地址:https://www.cnblogs.com/8023-CHD/p/10908160.html
Copyright © 2011-2022 走看看