闭包是什么

作者: bruce_wu | 来源:发表于2015-12-07 00:07 被阅读78次

以前听说过闭包也简单的了解过,一直以为闭包就是可以将函数作为对象或参数使用。
最近看书又看到关于这块的概念发现并非如此,所以就较真详细了解了一下闭包的概念。
有一些编程语言(如: javascrpt)中提供了函数对象的概念,有些人包括我认为这个就叫做闭包,其实这是不准确的。

  • 概念
    下面我查询了解了一下闭包的概念

1、闭包是指函数有自由独立的变量。换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境。
2、在函数对象中,将局部变量及其环境封闭起来的结构被称为闭包。

  • 代码
    例如如下js代码:

    function  extent() {
      var n=0;
      return function() {
        n++;
        console.log("n="+n);
      }
    }
    f =extent();
    f();  //n的值为1
    f();  //n的值为2
    

如上代码,将带有 n 这个变量和环境封闭起来并可以供外部使用的结构就是闭包。

  • Ruby中的闭包
    其实在ruby中我们经常使用闭包,例如如下
    sum = 0
    10.times{|n| sum += n}
    print sum
    10.times 表示调用对象10的 times 方法,紧跟在这个调用后面的大括号里面的部分就是Block。Block 实际上就是匿名函数,它可以被调用,可以捕获上下文。因此上面的代码已经使用了闭包。

  • 应用场景
    1、保护函数内的变量安全。以最开始的JS为例,函数extent中n只有通过函数f才能访问,而无法通过其他途径访问到,因此保护了n的安全性。
    2、在内存中维持一个变量。如上JS,由于闭包,函数extent中n的一直存在于内存中,因此每次执行f(),都会给n自加1。

  • 使用闭包的注意点
    1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成性能问题
    2)闭包会在父函数外部,改变父函数内部变量的值。所以,一定要小心,不要随便改变父函数内部变量的值。

相关文章

  • Python闭包与几种装饰器浅析

    闭包 闭包是什么?闭包可以保存外部函数的变量,可以增加代码的复用性,那具体闭包的构成是什么? 1. 闭包构成条件 ...

  • 前端常见问题总结

    什么是闭包?闭包的用途是什么?闭包的缺点是什么? 什么是闭包 闭包:内部函数总是可以访问其所在的外部函数中声明的参...

  • 闭包、call-apply-bind 的用法 、HTTP状态码

    一、什么是闭包?闭包的用途是什么?闭包的缺点是什么? 答 :1、什么是闭包:如果一个函数用到了外部的变量,那么这个...

  • 闭包,call、apply、bind 的用法,HTTP 状态码

    什么是闭包?闭包的用途是什么?闭包的缺点是什么?• 闭包:如果一个函数用到了外部的变量,那么这个函数加这个变量就叫...

  • 闭包的总结

    围绕:闭包是什么?闭包的用途有哪些?闭包的缺点是什么? 这三个问题来进行总结 一、何为闭包?如果一个函数用到了外部...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • web前端必知篇:闭包的理解

    闭包这玩意,在面试的时候经常被问到。如果你还不了解,小编就简单的讲解一下! 闭包是什么,闭包的优点是什么? 闭包就...

  • 闭包是什么

    闭包是什么? 闭包是一个函数 闭包可以使用在它外面定义的变量 闭包存在定义该变量的作用域中 各种专业文献上的"闭包...

  • JavaScript 中 闭包 的详解

    闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念。ECMAScript 中给闭包的定义是:闭...

  • JavaScript 中的闭包

    闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念。ECMAScript 中给闭包的定义是:闭...

网友评论

    本文标题:闭包是什么

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