知识卡片
闭包捕获变量形成持久化状态
内容
当一个函数在另一个函数内部定义并被返回出去时,内部函数会”捕获”外层函数作用域里的变量——不是复制一份快照,而是持续引用同一个变量。外层函数早已执行完毕、其局部变量按理该被销毁,但只要返回的闭包还存在,被捕获的变量就会跟着闭包一起存活,每次调用闭包都能读到并修改上一次调用留下的值(如用一个totalPopulation变量实现累计增长的计数器)。这本质上是闭包在没有显式类和实例的情况下,把”状态 + 操作这个状态的行为”捆在了一起,等价于一个只有单个方法、构造参数即初始状态的极简对象。发散:这解释了为什么函数式语言里”闭包”和面向对象里”对象”常被类比——两者都是数据与行为的一种封装方式,只是语法外壳不同。
参考来源
《Swift编程权威指南》第13章《闭包》