2014-10-29 63 views
1

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是内部关闭?

+7

'bar'是关闭的,'tmp'是一个局部变量,'foo'是一个函数。 – Afforess 2014-10-29 19:26:57

+0

@Afforess每个变量被称为变量 – exebook 2014-10-29 19:28:30

+2

Closure是一个函数+它的作用域函数被创建在一起。这是* closure *。 – dfsq 2014-10-29 19:28:34

回答

0

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