`
jingwei.yang
  • 浏览: 3142 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

闭包也就这玩意

阅读更多

闭包也叫closure这东西听起来挺玄乎,《js犀牛书》上搞了一计数器作为例子,如下:

 

function counter() {
    var n = 0;
    return {
        count: function() { return n++; },
        reset: function() { n = 0; }
    };
}
var c = counter(), d = counter();   // Create two counters
c.count()                           // => 0
d.count()                           // => 0: they count independently
c.reset()                           // reset() and count() methods share state
c.count()                           // => 0: because we reset c
d.count()                           // => 1: d was not reset

 我看了半天,没觉得有啥大不了的,感觉很自然,我转念一想,这不就是把函数当成面向对象中的类了嘛

 

public class counter() {
    private int n = 0;
  
    public int count{ return n++; },
    public void reset{ n = 0; }
}
counter c = new counter();
counter d = new counter();   // Create two counters
c.count()                           // => 0
d.count()                           // => 0: they count independently
c.reset()                           // reset() and count() methods share state
c.count()                           // => 0: because we reset c
d.count()                           // => 1: d was not reset

 肿么样?是这回事吧,其实闭包就是:

“把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value)。”

欢迎拍砖。

 

一个较为详细的关于闭包的文章如下:

深入理解js闭包

分享到:
评论

相关推荐

    C语言实现三种闭包算法(传递,自反,对称闭包)

    3. **对称闭包**:遍历关系矩阵,如果(a, b)存在,就在(b, a)的位置也标记为1。同样适用于链表,如果a指向b,那么添加b指向a的链接。 在实际编码时,需要注意边界条件、内存管理和效率优化。例如,使用位操作可能...

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...

    Java闭包 Java闭包

    在2013年发布的 JavaSE8 中包含一个叫做 Lambda Project 的计划,在 JSR-335 草案 中有描述。...在这篇文章中,将粗略的看一遍Java8的特性,并介绍 Lambda表达式。而且将试着放一些样例程序来解释一些概念和语法。

    关系闭包的计算

    若关系R不是自反的,则可以构造一个最小的自反关系R'⊇R,这个R'就是R的自反闭包。 2. **对称闭包**:对于集合A上的关系R,如果对于任意的,y>∈R,都有,x>∈R,则称R是对称的。若R不是对称的,则可以构造一个最小的...

    计算NFA中ε闭包

    在这个例子中,状态1的ε闭包包含状态2;状态2的ε闭包包含状态4;状态3的ε闭包包含状态4;状态4的ε闭包包含状态5;状态5的ε闭包包含状态2和状态3。 #### 五、总结 通过上述程序,我们可以有效地计算给定NFA中...

    用矩阵求自反闭包自反闭包

    此外,自反闭包也是计算传递闭包的基础,传递闭包是包含所有通过一系列关系可达到的元素对的关系。 在实际问题中,如数据库查询优化、网络路由分析和社交网络分析等领域,理解和计算自反闭包都是至关重要的。因此,...

    求闭包 属性集闭包 函数依赖的闭包

    3. 用户输入完毕所有的依赖后,显示“请输入属性集求闭包”的提示,当用户输入1个或者多个属性时,求出对应的闭包。(如,用户输入A,则显示A+的值, 用户输入AB则求出AB+的值。显示完毕后,再次显示“请输入属性集...

    最符合菜鸟的闭包

    6. **函数工厂**:闭包也可以用来创建可复用的函数生成器。比如,可以创建一个函数,返回一个新的函数,新函数记住其创建时的参数,这样每次调用新函数都会使用这些参数。 7. **事件处理**:在处理DOM事件时,闭包...

    Swift之闭包ClosureDemo

    Swift中的闭包是一种强大的编程概念,它允许我们定义一段可移动和可重用的代码块,可以在函数中作为参数传递,也可以作为返回值。闭包在很多编程语言中都有类似的概念,但在Swift中,它们的设计既简洁又灵活,使得...

    数据库求属性集闭包&函数依赖闭包

    3) 计算属性集闭包的算法,在课件里有详细说明。方法很简单,但用文字描述很抽象。。。。不解释。。。 4) 计算函数依赖的闭包。此步骤不作要求,但要会方法。个人总结:将所有属性元素组成一个集合(域)记为R;...

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    然而,当函数返回一个内部引用了外部变量的闭包时,即使外部作用域不再需要这些变量,它们也无法被垃圾回收,因为闭包仍然持有对它们的引用。这就是闭包引发内存泄露的一种常见方式。 内存问题主要分为以下几种类型...

    Javascript 闭包完整解释

    **闭包**是一个非常重要的JavaScript概念,它指的是一个函数能够记住并访问其外部作用域中的变量的能力,即使该函数在其外部作用域之外被调用也是如此。具体来说,闭包是由函数及与其相关的引用环境组合而成的一个...

    原子闭包系统, 原子闭包算子和原子全蕴含系统

    原子闭包系统是特别关注原子这一概念的闭包系统,即在集合S上,通过闭包算子生成闭包系统的子集。而原子闭包算子则是在2S上的映射,满足闭包算子的性质,并且关注原子的特性。原子全蕴含系统是指在特定逻辑框架下,...

    js闭包详细讲解

    然而,如果存在闭包引用了外部函数的局部变量,那么这个外部函数的执行上下文就会被保持在内存中,直到所有引用它的闭包都被销毁。 #### 三、闭包的应用场景 闭包在JavaScript开发中有着广泛的应用,下面列举了...

    ios-闭包传值.zip

    闭包可以是匿名的,即没有名称,也可以通过类型别名或函数指针进行命名。在Swift中,闭包表达式提供了一种简洁的语法,允许我们省略一些不必要的语法元素,如参数类型和返回类型。一个简单的闭包例子如下: ```...

    二元关系的闭包运算

    1. **传递闭包**:如果关系R满足这样的性质:对于所有a, b, c属于A,若aRb且bRc,则aRc,我们就说R是传递的。传递闭包是包含R及其所有可能通过传递性推导出的元素对的最小关系。 2. **自反闭包**:如果关系R在集合A...

    js闭包个人理解

    这也就解释了为什么连续调用`c()`时,`i`的值会依次递增。 #### 闭包的应用场景 闭包在JavaScript中有多种应用场景: 1. **私有变量和方法**:通过闭包可以实现变量的封装,使其不被外界访问,从而达到私有化的...

    山东大学三元闭包实验

    如果存在一个三元组(a, b, c),使得a与b有关系R,同时b与c也有关系R,那么我们说a与c之间存在R的三元闭包。在数据库理论中,这可以用来描述实体之间的复杂关联。例如,如果学生(a)选修了课程(b),并且课程(b)...

    JS闭包可被利用的常见场景

    这时,闭包就派上用场了。我们可以创建一个外部函数,接受参数,并返回一个新的内部函数,这个内部函数能够访问外部函数的参数。在外部函数中,内部函数被返回并赋值给一个变量,然后这个变量作为 `setTimeout` 的...

    Swift 中的闭包和 Objective-C 中的Block

    尽管这两种语言都属于Apple的生态系统,但它们在闭包和Block的概念上有细微差别。 首先,让我们从Swift的闭包开始。闭包在Swift中是一种强大的工具,它允许我们将一段代码包装起来作为一个独立的实体,可以在程序的...

Global site tag (gtag.js) - Google Analytics