闭包是函数与其创建时词法环境的组合,能持续访问外部函数变量。需满足三条件:外部函数内定义内部函数、内部函数引用外部变量、外部函数执行完后内部函数仍可调用。

闭包就是函数“带着老家的钥匙出门”——它在外部函数里定义,却能一直访问外部函数里的变量,哪怕外部函数早就执行完了、已经“下线”了。
闭包的通俗比喻
想象你出生在一个小院(外部函数),院子里有张桌子(变量 message)和一把专属钥匙(内部函数)。你长大后搬去外地工作(内部函数被返回并调用),但只要还攥着那把钥匙,就能随时打开院门,查看甚至修改桌上那张纸的内容。院子虽空,东西没丢——因为钥匙还在,院子就被“锁住”不回收。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
闭包的三个硬性条件
- 必须有外部函数,且内部定义了另一个函数(嵌套结构)
- 内部函数必须引用了外部函数的变量或参数(哪怕只读一次)
- 内部函数要在外部函数执行结束后,依然有机会被调用(比如作为返回值、赋给变量、传入其他函数等)
一句话定义(MDN 风格+人话版)
闭包 = 一个函数 + 它被创建时所处的词法环境(也就是它能“看到”的那些变量)。这个组合让函数拥有“记忆能力”,不是靠全局变量,而是靠自己诞生那一刻就绑定好的局部上下文。
常见误区提醒
不是所有嵌套函数都是“典型闭包”——如果内部函数压根没用外部变量,那它只是语法嵌套,没有形成实质闭包;也不必非得 return 才算,只要内部函数被保留在某个作用域外(比如存进数组、绑定事件、传给 setTimeout),且仍可访问外部变量,就算。

















