首页 > 其他分享 >什么是闭包?

什么是闭包?

时间:2023-01-24 23:44:14浏览次数:56  
标签:闭包 function 函数 什么 counter add https

目录


引入闭包

不知道什么是闭包,推荐去看看这个视频:

【python技巧060】形象理解闭包,玩转闭包
https://www.bilibili.com/video/BV1Vx4y1u7YX/

闭包就是能把函数的内部私有信息传递出去的一种机制,并且必须是函数执行过才能传递出去,没有执行就不能,早期挺多编程语言都有闭包这种特性,后来的Java使用了类和私有变量来替代闭包,下面以JavaScript的闭包来举例 :

菜鸟教程——JavaScript 闭包
参考:https://www.runoob.com/js/js-function-closures.html

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();    
    return counter; 
}

add();
add();
add();
 
// 输出: 3

发现问题

为什么是3呢?我的认知是,函数内部的变量在函数执行完后就会销毁,可为什么变成函数调用它之后,就能保存上次调用时的结果呢?

粗浅的解释:
离开函数作用域时,只有变量的引用被“销毁”了。
但由于函数参数默认值一直引用同一个对象,所以这个列表永远不会被销毁,它的状态也会一直保存到下一次函数调用。
感觉就是用问题回答了问题。 - -。

用汇编的来解释闭包

从汇编角度理解 Golang 多值返回和闭包
https://toutiao.io/posts/m781m5/preview

缺乏对汇编和编译层的理解,只能断在这里了。希望后面能补上这些盲区。
TODO
2023.1.24 Mysticbinary 北京

标签:闭包,function,函数,什么,counter,add,https
From: https://www.cnblogs.com/mysticbinary/p/17066453.html

相关文章

  • 什么是大数据、人工智能?
     一、何为统计学?统计学:研究对象:统计学是通过数据认识客观现象,认识客观现象数量规律性的方法论科学。分类:数理统计、经济统计、金融统计、生物统计、政府......
  • 5week-6闭包
    packagemainimport"fmt"//理解闭包1funcadder(xint)func(int)int{//定义1个函数,没有参数,返回值是一个函数 returnfunc(yint)int{//返回1个函数,并且参......
  • JavaScript学习笔记—闭包
    1.定义闭包就是能访问到外部函数作用域中变量的函数2.什么时候使用当需要隐藏一些不希望被别人访问的内容时就可以使用闭包3.构成要件(1)函数的嵌套(2)内部函数要引用......
  • MySQL中IN和ANY的区别是什么
    MySQL中IN和ANY用于比较两个表达式是否相等。IN用于检查一个值是否在一个列表中。语法为:valueIN(list)。例如:CopycodeSELECT*FROMordersWHEREcustomer_idIN(1,......
  • 不理解为什么输出是2
    提问:    这个else不是要和最近一个没有匹配的if配在一起吗,第一个if后面的值为false,难道还执行吗,不太懂。才开始学习,所以问问大家?解答: 把括号补充好你看看,第一个......
  • Matlab保存文件的时候闪退是什么原因?该怎么解决?
    提问: 点保存或者用快捷键都是点开之后突然闪退,就一直保存不了,不知道是什么原因,应该怎么解决这个问题。解答: 你在保存时有没有在电脑上打开其他的东西,我也是win1064位,......
  • 2年Java开发需要具备什么水平?
    1、**熟练掌握Java基础知识和计算机编程思维,**熟练使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的JavaAPI,包括I/O(NIO)、Socket、JDBC、XML、集合框架、多线......
  • 汇编语言"段"是什么?
    “段”是用来包含信息,告诉编译器或执行代码的机器,段里代码干什么用的。 问:为什么汇编要写“段”,其他程序不需要?答:不管是底层汇编还是系统里运行的应用软件(QQ等)都有“......
  • makefile是什么,它是如何工作的?
    概述当某些文件发生改变时想要执行一个执行一个任务时,make可以排上用场。Make需要一个文件名为makefile或MakeFile的文件来定义一系列将要运行的任务集。你可以使用make来......
  • 为什么我晚上 9 点还在写代码
    我向软件开发人员传达的信息一直非常一致:你不需要加班就能成功。工作更多只是贵公司的免费劳动力。保护您的个人时间。但是有一天,我很晚才坐车回家。我没有值班。那天......