zoukankan      html  css  js  c++  java
  • 浅谈闭包(Closure)

    一、闭包

      好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识。今天查看了一下维基百科,顺便写下来。

    二、闭包的定义

      在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范围内命名变量 绑定到语言的一类对象-------函数。操作上,一个闭包就是一条存储着 函数和其环境变量 的记录:映射着 函数的变量(变量在本地使用,但是在闭包环境中定义) 和 值或者引用(其名称在闭包创建时就进行绑定)。一个闭包(和普通函数不一样)允许函数访问 其引用的变量(通过闭包拷贝其值和应用),甚至当函数在其范围以外调用。

    三、样例

    下面的程序代码片定义了一个高阶函数----startAt(x) 和其嵌套函数------incrementBy(y)。嵌套函数incrementBy在其内部可以访问x,尽管x变量不是本地定义,但是其在x的词法范围内。函数startAt(x)返回的是闭包,包含一份x的 值 或 其在startAt调用中x的引用 的拷贝,函数 incrementBy()的内容的拷贝

    function startAt(x)
       function incrementBy(y)
           return x + y
       return incrementBy
    
    variable closure1 = startAt(1)
    variable closure2 = startAt(5)

    注意:由于startAt()返回的是一个函数,所以上述例子closure1 和 closure2 也是函数类型的,可以像函数一样使用。虽然他们返回都是相同的函数incrementBy,但是其相关联的环境不同。

  • 相关阅读:
    jQuery学习(三)
    HTML基础
    对于跨域问题的解决
    Spring boot 默认静态资源路径与手动配置访问路径
    json:java中前台向后台传对象数据
    javascrit常用互动方法
    java IO流
    HTML中data* 属性
    java中一些对象(po,vo,dao,pojo)等的解释
    使用mybatis generator插件,自动生成dao、dto、mapper等文件
  • 原文地址:https://www.cnblogs.com/skiler/p/7068111.html
Copyright © 2011-2022 走看看