• golang中的闭包_closure


    闭包_Closure:
    1.一般情况下,第一类对象都是独立的封闭的存在的,独立的封闭的起作用;
    2.第一类对象可以被创建;
    3.第一类对象可以作为参数传递给其他函数;
    4.第一类对象可以赋值给变量实体;

    5.通常是没有闭包的概念的,因为没有那种特殊的场景;
    6.但是在某些编程语言中(Go/PHP/JS/Python/LUA),将函数也设计为第一类对象;
    7.所以函数可以在运行时创建,这个太特殊了,这个使得我们可以在调用另一个函数的时候,创建一个新的函数.
    8.函数可以作为参数传递给另一个函数;
    9.函数可以赋值给变量实体.

    10.根据第7条的规则,再加上函数可以引用函数外的变量;这就会导致一种特殊的情况出现,什么情况呢,如果新创建函数有引用外部变量,那么当新函数离开创造它的上下文时(函数运行的栈,这个函数通常是匿名函数),会发现那个它引用的变量,也会一起跟随它一起出来了,并没有随着创建那个变量的上下文的结束而释放. 所以结果是:新函数跟它引用的变量一起如同包装成为一个整体.

    11.只要闭包还在被使用,那么闭包引用的变量会一直存在.

    12.闭包作用
      1:保证局部变量的安全性:闭包内声明的局部变量无法从外部修改,因为函数只能被调用,没有其他操作可以操作其内部代码.
      2:将匿名函数作为参数.在另一个函数内部使用其他函数内声明的变量.
      3:将闭包的匿名函数作为返回值.类似装饰器设计.比如说一个函数,传入一个值,然后根据这个变量在这个函数内部生产一个闭包,就叫装饰器,然后返回.

  • 相关阅读:
    张建(北京工业大学软件学院副教授)_百度百科
    孤独患者马天宇:独自生存我也会适应得很好_红人访_腾讯娱乐_腾讯网
    zz
    java~springboot~ibatis Invalid bound statement (not found)原因
    数据库~dotnetcore连接Mysql插入中文失败
    k8s~术语解释
    springboot~让我习惯了TDD的开发模式
    POJ 2498 Martian Mining
    Java中的DeskTop类
    我和ip_conntrack不得不说的一些事
  • 原文地址:https://www.cnblogs.com/keystone/p/13722769.html
Copyright © 2020-2023  润新知