闭包使 setTimeout 能持久化访问外部变量解决循环中变量取值错误问题var 共享变量导致输出重复值而 IIFE 或 let 可创建独立闭包捕获每次迭代值且闭包可维持任意状态但需注意内存泄漏风险。在 JavaScript 中闭包让 setTimeout 内部能“记住”并持续访问外部函数作用域中的变量从而实现变量的持久化——这不是靠全局变量而是靠函数作用域链的自然保留。为什么 setTimeout 里常出现变量“取不到最新值”典型问题循环中为每个定时器设置延时执行但所有回调都输出同一个最终值。这是因为 var 声明的变量被共享且回调执行时循环早已结束变量只留下最后一次赋值的结果。例如for (var i 0; i 3; i) { setTimeout(() console.log(i), 100); // 输出 3, 3, 3}根本原因所有定时器回调共享同一个 i而 setTimeout 是异步延迟执行等到真正运行时循环已完成i 已变为 3。立即学习“Java免费学习笔记深入”用闭包捕获每次迭代的变量值闭包的核心是内部函数保留对外部函数作用域中变量的引用。我们可借助立即执行函数IIFE或块级作用域让每次循环都创建独立的闭包环境。 Trenz AI驱动的社交电商营销平台专为TikTok Shop设计