在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是内部闭包?
发布于 2014-10-29 19:29:12
Bar是一个闭包,因为它有一个封闭环境,其中存在tmp值,它是foo函数的局部变量。局部变量或私有变量可以被内部函数访问,即使函数已经返回,因为它形成了封闭的环境(外部函数的局部变量的值驻留在这个环境中),这就是为什么它被称为闭包,所以这里将Bar称为闭包,但它关闭Foo的环境。
https://stackoverflow.com/questions/26638890
复制相似问题