js中的闭包是如何工作的?

发布于 2022-08-31 20:13:45 字数 417 浏览 26 评论 0

爱因斯坦有一个观点:一个东西,如果你不能向一个6岁的孩子解释,说明你对它还不够理解。

对闭包通常的解释是:像下面这样

function foo(x) {
  var tmp = 3;
  return function (y) {
    alert(x + y + (++tmp));
  }
}
var bar = foo(2); // bar is now a closure.
bar(10);

每次调用bar都会改变foo中tmp的值,
此时bar就是一个闭包。


如果是6岁,想到一个稍通俗的描述:闭包就是一个叼炸天的包子,你拿它沾醋的时候,它可以把同一笼的其他包子也变酸了,这个蒸笼就是一个闭包。

求更好的解释。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

够钟 2022-09-07 20:13:45

tmp是在foo中声明的,foo执行完毕后,tmp应该消失,但是没有,tmp还在某个地方活着,这就是生命周期,tmp这个外部作用域中的局部变量被foo函数返回的函数对象(bar)封闭了。闭包这个词本就是封闭的意思,tmp的寿命和bar的寿命是相等的,当不再访问bar时,垃圾回收掉后,tmp也终结了。
在函数对象中,将局部变量这一环境封闭起来的结构就称为闭包。

╰ゝ天使的微笑 2022-09-07 20:13:45

tmp变量一直存在在foo函数中,不会被垃圾回收掉。

恋你朝朝暮暮 2022-09-07 20:13:45

闭包就是一个叼炸天的老鼠屎,你拿它煮汤的时候,它可以把同一锅汤都也变坏了,这锅汤就是一个闭包。

╰沐子 2022-09-07 20:13:45

闭包可以不回收变量,引用函数内部的变量,防止全局变量

眼眸里的那抹悲凉 2022-09-07 20:13:45

我理解的闭包也就是,不管怎么样,内部的仍保持链接到外部的上下文,我以前面试的时候人家问我 什么是闭包,我说里面即使结束了,还能调用里面的变量。当然 我认为解释闭包最好的也就是,犀牛里面的解释,要跟垃圾回收机制一起理解

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文