一个JS闭包问题 | 节流防抖
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>闭包问题</title>
</head>
<body>
<script>
function fn1() {
var a = 2;
function fn2() {
a++
console.log(a)
}
return fn2
}
var f1 = fn1()
f1() //3
f1() //4
var f2 = fn1()
f2() //3
f2() //4
</script>
</body>
</html>
输出结果
3
4
3
4
尚硅谷_JS高级_常见的闭包
问题就是为什么不应该都是输出3,a为什么没有在每次函数调用前被重新赋值?
浅层的理解:
因为return fn2给了f,f没消失,闭包就不会,所以再var一个f,那就会出现两个闭包了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!