use*_*234 16 javascript closures
如何理解Javascript中的闭包?
一般而言,闭包是绑定到一个或多个外部变量的函数.调用它时,该函数可以访问这些变量.在JavaScript中,当函数在另一个函数内声明时,通常会实现闭包.即使在父函数终止之后,内部函数也会访问父函数的变量
在这个语句中,"闭包是一个绑定到一个或多个外部变量的函数",这是否意味着我们可以这样做:var myFun = Function(msg){...};它是否正确?
什么意思"甚至在父功能终止后"?
closure是一个绑定到一个或多个外部变量的函数
这个概念的一个例子是函数栏绑定到外部变量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
Run Code Online (Sandbox Code Playgroud)
变量closure是指bar从调用返回的内部函数foo.调用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
Run Code Online (Sandbox Code Playgroud)
您对外部变量的解释不正确。这实际上意味着它可以做到这一点:
function make_closure() {
var x = 20;
return function() {
console.log(x);
};
}
var closure = make_closure();
closure(); // Displays 20Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |