javascript - 正确的闭包术语,或者确切地说什么是闭包

标签 javascript

this accepted popular answer对关闭情况进行了解释。我理解这个概念并且可以使用它,但我的问题相当术语化,看看这个简单的例子:

function foo(x) {
  var tmp = 3;

  function bar(y) {
    alert(x + y + (++tmp)); // will alert 16
  }

  bar(10);
}

foo(2);

那么这里的闭包到底应该被称为:bar?还是foo?或tmp?还是全部一起?

您看到社区 wiki 如何将 bar 称为闭包,这完全正确吗?那么我如何在对话中引用 tmpfoo 呢?它们也称为闭包、闭包内的变量和闭包访问器或其他什么吗?还是bar叫外闭包,foo叫内闭包?

最佳答案

Bar 是一个闭包,因为它具有封闭的环境,其中存在 tmp 值,该值是 foo 函数的局部变量。 由于形成了封闭的环境(外部函数的局部变量的值驻留在其中),即使函数返回后,内部函数也可以访问局部或私有(private)变量,这就是为什么它被称为闭包,所以这里 Bar 被称为闭包,但它关闭了 Foo 的环境。

关于javascript - 正确的闭包术语,或者确切地说什么是闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26638890/

相关文章:

javascript - 给定一个随机十六进制颜色列表,根据 "likeness"对它们进行排序

javascript - 与 useEffect 一起使用时,自定义钩子(Hook)会被无限调用

javascript - react 错误 : Target Container is not a DOM Element

javascript - 网站在 IE 中看起来很糟糕,但在 Firefox 中却很棒 - IE 不读取 javascript

javascript - 更改文本区域字体系列的功能(使用选项选择)

JavaScript - 获取作为特定类实例的所有对象

javascript - 监听window onresize,不包括jquery dialog的onresize

javascript - 单击页面其余部分后 <div> 弹出窗口隐藏

java - 从 javascript 调用 java 方法

javascript - Internet Explorer 中的 Lambda 表达式