在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
一个闭包,这是完全正确的吗?那么如何在对话中引用tmp
和foo
?它们在闭包和闭包存取器或其他任何东西中也被称为闭包或变量吗?或者bar被称为外部封闭,foo是内部封闭?
答案 0 :(得分:0)
Bar是一个闭包,因为它有一个封闭的环境,其中存在tmp值,它是foo函数的局部变量。 内部函数可以接受本地或私有变量,即使在函数返回后也会因为形成的闭合环境(外部函数的局部变量值驻留在其中),这就是为什么它被称为闭包,所以这里Bar是被称为封闭,但它关闭了Foo的环境。