正确的闭包术语,或者究竟是什么称为闭包

时间:2014-10-29 19:25:14

标签: 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是内部封闭?

1 个答案:

答案 0 :(得分:0)

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