闭包的理解
@ hanamichi · Wednesday, May 30, 2018 · 1 分钟阅读 · 更新于 May 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++

学习中:

  • Rust
  • JavaScript

目前在 99cloud 工作

– 2019 年 12 月 31 日更新

2020年的计划

2020年的计划

  • github issue和wiki记录平时的一些想法,坚持整理然后写入博客
  • 加深golang微服务的理解, 写一个便于重复利用的微服务项目
  • 等多关注云原声CNCF开源社区动态,争取做些贡献
  • 完成两本书的阅读和笔记记录(程序员修炼之道,代码整洁之道)
  • 日本旅游

其他

其他

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

You can buy me a coffee. ~

我的微信赞赏码

wechat

社交链接