知识卡片
闭包捕获变量脱离作用域仍有效
内容
闭包与普通函数最本质的区别不在语法(都有参数和返回值),而在于闭包会把它定义时所处 上下文里用到的局部变量捕获(复制或引用)进自己内部,即使这些变量的原始作用域已经结束, 闭包仍能继续访问它们。普通函数体内只能使用自己的参数和全局作用域的东西,无法凭空”记住” 某次调用现场的局部状态;闭包相当于把一段代码和它执行时的环境一起打包带走。发散:这也是 为什么闭包天然适合做回调——网络请求发起时的局部变量(如某个视图引用),闭包可以在请求 真正返回、原作用域早已结束的那一刻依然拿到。
参考来源
《Swift 4从零到精通iOS开发》第5章《函数与闭包技术》