在 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叫内闭包?
最佳答案
Bar 是一个闭包,因为它具有封闭的环境,其中存在 tmp 值,该值是 foo 函数的局部变量。 由于形成了封闭的环境(外部函数的局部变量的值驻留在其中),即使函数返回后,内部函数也可以访问局部或私有(private)变量,这就是为什么它被称为闭包,所以这里 Bar 被称为闭包,但它关闭了 Foo 的环境。
关于javascript - 正确的闭包术语,或者确切地说什么是闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26638890/