【霏艺所思】什么是闭包?

Q:什么是闭包?
A:一种内部函数,用来访问内部变量。

这里注意到两个关键点:
1.它是一个函数
2.用途是访问内部变量

Q:为什么要使用闭包?
A:Javascript 类语言没有提供 C语言的引用功能。。。

开始本文的重点!
C/C++/Rust这些裸金属语言,支持一种叫引用的操作。
记作 int &a = b; 
但是js这些语言不支持啊!就搞一个“闭包”来实现类似的功能,然后掩盖自己的缺陷。。。

js的缺陷,函数调用只能传值,不能传引用。每次调用函数,会创建一个新的作用域
上层作用域,无法感知下层作用域。C语言可以在上层作用域创建内存,通过引用来传给下层,下层去操作上层创建的内存就可以了。那么js是先天不足。。。。

有人会说,不能传引用,传值不行么?
当然不行!很多问题:
1.调用函数的时候,函数内部操作完修改了变量是内部的作用域的拷贝,外层内存没有变化
2.浪费了内存
其实就是C语言语法的基础。。。
得明白为什么C语言要搞引用

明白了么?
闭包是为了解决某些语言不支持“引用”特性,自己给自己找台阶下的一个语法而已。。。
引用是为了省内存。闭包达到了类似的效果,但是性能开销却很大。。。少用!

----------------------------------------------
本文章时间来不及,日后补充

进入本文的重点章节,跨语言编程!【比如C++ 和 Python】
我写AI的代码,从python侧调用C++的函数,可以通过pybind
但是如果要操作内存怎么办?
因为不支持传递引用,所以我就传闭包给C++[所以你们看AI相关的代码,经常在C++侧看到闭包]
当然有更加Native的方法,就是传c++的指针给python
【不管是传闭包,还是传指针,我来不及写了,下次补上】

----------------------------------------------
本文章时间来不及,日后补充

进入本文的第二个重点章节,右值引用,完美转发!
作为裸金属语言,C++对性能的敲诈【应该是压榨】可谓丧心病狂~
上面那么多铺垫,是为了让你们明白什么叫引用,以及引用的好处
这样,你们才能明白,我接下来要说的东西
8
分享 2020-05-23

19 个评论

闭包:闭关锁国的包子,简称闭包

要发言请先登录注册

要发言请先登录注册

发起人

霏艺Faye 图书管理员

https://www.facebook.com/booklove.crown/

状态

  • 最新活动: 2020-06-14
  • 浏览: 6355