• 浅谈闭包(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,但是其相关联的环境不同。

  • 相关阅读:
    js 技巧 (八)JS代码判断集锦(之二)
    js 技巧 (七)JS代码判断集锦(之一)
    js 技巧 (六)弹窗代码汇总
    js 技巧 (六)JavaScript[对象.属性]集锦
    js 技巧 (五)
    js 技巧 (四)
    1.7.7释放锁的不良后果
    1.7.6方法stop()与java.lang.threadDeath异常
    1.7.5能停止的线程-暴力停止
    1.7.4在沉睡中停止
  • 原文地址:https://www.cnblogs.com/skiler/p/7068111.html
Copyright © 2020-2023  润新知