目录
引入闭包
不知道什么是闭包,推荐去看看这个视频:
【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 北京