闭包的理解
@ hanamichi · Wednesday, May 30, 2018 · 1 分钟阅读 · 更新于 五月 30, 2018

关于闭包的一些理解及记录

闭包

对象是带方法的数据,而闭包是带数据的方法(后半句的数据特指外部数据)

闭包也是一种为表示带有自由变量的过程而用的实用技术

f(x,y) = x+y+z

在函数f中,x,y为约束变量,z为自由变量。

同样在一个代码块中,如果某个变量在这个代码块中没被定义过,那么这个变量就可以被认为是一个自由变量。

Haskell社区把函数分为两类,一种为闭包,另一种和闭包相对的叫组合子

不含自由变量的函数叫组合子。

全局函数是一个有名字但不会捕获任何值的闭包。

全局函数(本质上是一个有名字的组合子)被归为闭包的一种特殊形式。

例子:

//从银行账户中取款时,每一次取款都会更新账户余额balance,
function makeAccount(balance){
    function withdraw(amount){
    	balance = balance - amount;
        return balance;
    }
    return withdraw;
}
//withdraw(是一个闭包)作为函数makeAccount的返回值,这样withdraw不仅仅单纯作为一个函数存在,而且携带着balance变量

var withdraw1 = makeAccount(100);  // withdraw1 is a closure here.
withdraw1(10);
// => 90
withdraw1(30);
// => 60
//我们还可以生成不止一个withdraw闭包,而且各个闭包之间是相互独立的。

关于我

关于我

Hanamichi 的 ❤️ 博客

记录一些 🌈 生活上,技术上的事

全平台玩家(pc-steam, ps4, switch)

职业是后端工程师

正在努力学习

对云原生微服务感兴趣

主要的技术栈是:

  • golang
  • kubernetes
  • 微服务架构

略懂一二:

  • python
  • C/C++
  • java

学习中:

  • Rust
  • JavaScript

目前在 99cloud 工作

– 2021 年 2 月 1 日更新

2020年的计划

2021年的计划

现在回头看看,因为疫情和自身自律性原因,2020年的计划大多都没有实现

  • github issue和wiki记录平时的一些想法,坚持整理然后写入博客

  • 继续阅读 程序员修炼之道代码整洁之道

  • 关注云原声CNCF开源社区动态,争取做些贡献(平时还是太懒,自律性不强)

  • 以 java spring 生态继续研究架构的世界

其他

其他

如果你喜欢我的文章 or 我的项目,或者它们可以给你带来帮助。

You can buy me a coffee. ~

我的微信赞赏码

wechat

社交链接