2014-10-29 47 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的環境。

相關問題