如何理解Javascript中的闭包?
这个问题在这里已经有了答案:
闭包是一个绑定到一个或多个外部变量的函数
这个概念的一个例子是功能栏绑定到外部变量x,y和z:
function foo(x, y) {
var z = 3;
return function bar(a, b, c) {
return (a + b + c) * (x + y + z);
};
}
var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
变量closure
指向从foo
调用返回的内部函数bar
。 调用closure
就像是重新进入内范围foo
,这让了解所有的foo
的局部变量和参数。
即使在父功能终止之后
这意味着在执行foo
之后,存储在closure
变量中的返回函数将保持foo
的状态。 你甚至可以通过再次调用foo
来创建多个独立的闭包:
var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
var closure2 = foo(0, 0);
closure2(5, 6, 7); // (5 + 6 + 7) * (0 + 0 + 3) = 21
/* closure2 does not affect the other closure */
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
你对外部变量的解释不正确。 这确实意味着它可以做到这一点:
function make_closure()
{
var x = 20;
return function()
{
alert(x);
};
}
var closure = make_closure();
closure(); // Displays 20
我不确定你从哪里引用,但是它听起来像是在父功能完成运行时引用的。
链接地址: http://www.djcxy.com/p/1481.html