写在前面:在一开始JS基础学习的过程中,闭包的问题也曾困扰过我,其实无论是JS、OC、还是Swift,闭包的本质都是一样的。借着最近开始学习Swift,又重新将这部分复盘整理了一下。目前对于闭包相关的理解可以说是很透彻了,发现新问题再来补充。
专业的解释:
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
形式:
Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数(Lambdas)相似。
故名思义,闭合地包起来可以完成一件事儿就是个闭包。闭包这玩意儿,只是给它取了个名字而已,全局函数其实也是个闭包。还有闭包就是自包含的函数代码块,可以在代码中被传递和使用。比如,嵌套函数,函数作为参数的情况。
全局函数 |
嵌套函数 |
闭包表达式(轻量级语法) |
有名字 |
有名字< |