• 学习闭包笔记


     什么是闭包
    闭 包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变 量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境 (作用域)。在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Lua、objective c 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。
    在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!
     
    闭包在javascript中的应用
    “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
     
    相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段
    function a(){
        var i=0;
        function b(){
            console.log(++i);
        }
        return b;
    }
    var c=a();
    c();
    这段代码有两个特点:
    1、函数b嵌套在函数a内部;
    2、函数a返回函数b。
    这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会输出值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
    当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
    闭包在javascript中有许多用法
    模拟私有变量
    代码如下
    function Counter(start){
        var count = start;
          return{
              increment:function(){
                  count++;
              },
              get:function(){
                  return count;
              }
      }
    }
    var foo = Counter(4);
    foo.increment();
    foo.get();// 5

    保存状态

  • 相关阅读:
    java构造方法
    StringBuffer .insert方法输出电话号码格式
    统计字符串中某个字出现的次数
    面相对象往一个数组里添加学生,显示学生信息
    OpenStack入门
    Python如何让字典保持有序
    Python包管理工具setuptools相关
    python os.path 模块常用方法
    python sys.argv[] 用法
    python远程执行命令
  • 原文地址:https://www.cnblogs.com/angelfan/p/4173497.html
Copyright © 2020-2023  润新知