zoukankan      html  css  js  c++  java
  • 闭包原理解析及其应用场景

    闭包是一个词法作用域和函数特性组合在一起形成的一个新特性。闭包是被创造出来,用来描述这个新特性的。所以要理解闭包,必须先理解作用域和函数的概念。

    函数概念无需赘述

    作用域的外表是一对大括号,其本质是一个按照一组规则对内存中的变量进行查找的工具,也有人把它直接理解为一套规则。规则大致是,当程序需要某个变量时,会先在当前作用域查找,如果找不到会继续在外层作用域查找,逐级往上,直到找到该变量,或者查找完全局作用域。

    下面的代码清晰地展示了闭包:

    function foo() {
              var a = 2;
              function bar() {
                console.log( a );
              }
              return bar;
            }
    var baz = foo();
    baz(); // 2

    一般情况下,foo()执行后,其所在的整个作用域会被垃圾回收器释放。但是,由于bar() 依然持有对该作用域的引用,这个作用域包括其附属的变量都不会被回收,这个引用就叫作闭包。

    当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。

    查资料不过是偏门,撸源码才是脱离苦海的正道。
  • 相关阅读:
    7. ZooKeeper的stat结构
    6. ZooKeeper访问控制列表
    5. 监视和ZooKeeper操作
    4. ZooKeeper 基本操作
    3.Apache ZooKeeper数据模型
    Eclipse安装Activiti Designer插件
    Javascript Canvas验证码
    Tomcat9配置SSL连接
    JAVA将异常的堆栈信息转成String
    SpringBoot2静态资料访问
  • 原文地址:https://www.cnblogs.com/jarvisjin/p/9724815.html
Copyright © 2011-2022 走看看