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() 依然持有对该作用域的引用,这个作用域包括其附属的变量都不会被回收,这个引用就叫作闭包。

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

    查资料不过是偏门,撸源码才是脱离苦海的正道。
  • 相关阅读:
    深入理解Java Proxy机制
    StringBuilder与StringBuffer的区别
    反射
    list和set区别
    spring总结
    Hibernate与 MyBatis的比较
    手机拍照或选择照片上传html5代码
    JSP两种跳转
    离散化
    圆方树
  • 原文地址:https://www.cnblogs.com/jarvisjin/p/9724815.html
Copyright © 2011-2022 走看看