知识卡片

闭包保存状态

普通读书笔记卡 · 1492.e

内容

内部函数可访问定义它的外部函数的参数和变量(this/arguments除外),即使外部函数已返回,只要内部函数还存在这些变量就持续保留——这就是闭包。它能创建真正私有状态:如 quo 函数返回带 get_status 方法的对象,status 参数不会被复制,外部拿不到它、只能通过暴露方法访问。发散:闭包是模块和封装的基础;循环中闭包捕获循环变量本身(而非某次取值)是常见错误来源。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第4章《函数 Functions》"闭包"一节 - 结论依据:原文用 quo 函数举例说明返回的 get_status 方法即使在 quo 已经返回后仍能访问 status 参数本身而非副本,并明确指出"该函数可以访问它被创建时所处的上下文环境,这被称为闭包";fade 例子进一步说明外部函数返回后内部函数仍能持续访问其变量,据此推出闭包用于保存跨调用生命周期状态的结论。 - 原始内容:即使quo已经返回了,但get_status方法仍然享有访问quo对象的status属性的特权。get_status方法并不是访问该参数的一个副本,它访问的就是该参数本身。这是可能的,因为该函数可以访问它被创建时所处的上下文环境。这被称为闭包。