第二章 Closing in on closures
5.1 How closures work
一个晦涩的定义:A closure is the scope created when a function is declared that allows the function to access and manipulate variables that are external to that function.
另一个晦涩的定义:Closures allow a function to access all the variables, as well as other functions, that are in scope when the function itself is declared.
<script>
var later;
function outerFunction() {
var innerValue = "samurai";
function innerFunction() {
assert(innerValue, "I can see samurai");
}
later = innerFunction;
}
outerFunction();
/**
* Invokes the innerFunction through later. We can't invoke it
* directly because its scope (along with innerValue) is limited
* to within outerFunction()
*/
later();
</script>
通过later()来激活innerFunction(). 此时innerFunction()仍然可以观察到innerValue.
When we declared innerFunction() inside the outer function, not only was the function declaration defined, but a closure was also created that encompasses not only the function declaration, but also variables tht are in scope at the point of the declaration.