You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

闭包与普通函数的区别:为何MDN示例需嵌套内层函数?

闭包示例中内层函数的作用解析

你的写法和MDN的示例核心差异在于执行时机和可复用性,我们来拆解两者的区别:

1. 你的代码的问题

当你执行:

const size12 = makeSizer(12);

makeSizer函数会立刻执行,直接把页面字体设置为12px,同时因为函数没有返回值,size12最终是undefined——你没办法在之后的某个时刻(比如用户点击按钮时)再次触发“设置12px字体”这个操作。

2. MDN示例的设计意图

MDN的代码返回了一个内层函数,这时候:

const size12 = makeSizer(12);

makeSizer执行后,并没有立刻修改字体,而是返回了一个待执行的函数,size12就是这个函数的引用。之后你可以在任何需要的时候调用它,比如绑定到按钮点击:

document.querySelector('.btn-12').addEventListener('click', size12);

点击按钮时才会执行内层函数,把字体设置为12px。

3. 闭包的核心作用

这里的闭包让内层函数“记住”了外部函数makeSizer中的size参数——即使makeSizer已经执行完毕,内层函数依然能访问到对应的size值。所以size12、size14、size16这三个函数各自持有独立的size值,调用时会分别使用12、14、16来设置字体,不会互相干扰。

简单说,闭包在这里实现了延迟执行和状态保存,让你可以创建多个预设了不同字体大小的“操作函数”,在需要的时候再触发执行。

内容的提问来源于stack exchange,提问作者beta programmers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:19:57