通俗易懂的“闭包”

作者: 汉堡大痴 | 来源:发表于2018-07-16 11:02 被阅读172次

一,闭包是什么?

闭包:有权访问另一个函数中作用域的变量的函数。即间接访问变量(隐藏一个变量)。创建闭包的常见方式就是在函数的内部创建一个函数。

如上图就是一个简单的闭包,内部的函数可以访问全局的变量。

二,为什么会有闭包的概念

因为JavaScript语言的特殊性,JavaScript并没有类的概念,如何让一个数据封装成private变量就成了一个大问题。用var定义的是全局变量,内部的函数都会访问到同一地址。举个例子:

上面的代码打印的是4个5。如何解决这个问题,我们就采用了闭包的概念来完美的解决。

我们在for的作用域下新建一个匿名函数(立即执行),此时就构成了一个闭包,每一个变量被很好的独立出来,里面的函数都可以用到独立的i,此时的打印结果是每隔1s打印一个数字。(当然es6的标准我们可以用let解决var的作用域问题)。

java中解决上面的方法可以是这样:(但是JavaScript并没有类的概念)

其实java中也有闭包的概念,他是将方法封装成一个变量去储存,这个方法能够访问类中所有的自由变量。

实际上,java的语言并没有闭包,但他虚拟模拟闭包(即内部类+接口),用匿名内部类和接口去封装闭包。

所以从上面可以很简单的知道,JavaScript的闭包可以实现间接的访问一个变量,即隐藏一个变量。

三,一个闭包的例子

下面我写一个排序算法,让大家对闭包的概念有更深刻的认识:

上面也是一个闭包,里面的匿名函数中,proName是上一个函数的变量,他被里面的函数所调用。实现了对象的排序算法。(可以想一下java是怎么实现这个方法的)。

综上就是闭包的理解哦。

备注:ES6引入类的概念。感谢段师兄和蔡师兄帮忙指出错误

相关文章

  • 通俗易懂的“闭包”

    一,闭包是什么? 闭包:有权访问另一个函数中作用域的变量的函数。即间接访问变量(隐藏一个变量)。创建闭包的常见方式...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • javascript闭包详解

    跟我念 bi 闭 bao包 ,闭包的闭,闭包的包。。 闭包的简介 在计算机科学中,闭包(英语:Closure),又...

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • Gradle开发-Groovy闭包

    # 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础...

  • @escaping swift逃逸闭包和非逃逸闭包

    使用@escaping关键字的闭包是逃逸闭包 闭包默认是非逃逸闭包 逃逸闭包延长了闭包的生命周期 非逃逸闭包生命周...

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

网友评论

    本文标题:通俗易懂的“闭包”

    本文链接:https://www.haomeiwen.com/subject/ehrppftx.html