Javascript Closure
- A technique of scoped name binding
- Lexically scoped name binding
Example:
<html>
<head>
<title>Javascript Closure</title>
</head>
<body>
<script type="text/javascript">
function foo(x) {
return function bar(y) {
return x + y;
}
};
var v1 = foo(1);
var v2 = foo(2);
document.write("<p>v1(7) = " + v1(7) + "</p>");
document.write("<p>v2(8) = " + v2(8) + "</p>");
</script>
</body>
</html>
输出是:

解析:
对于函数v1,保留了foo(x)函数中的参数x的值(x = 1),换句话说,函数v1的作用域包括foo(x)函数的参数且其参数已被设置为1;
对于函数v2,也保留了foo(x)函数中的参数x的值(x = 2),即函数v2的作用域包括foo(x)函数的参数且其参数已被设置为2.
函数v1、v2包含了foo(x)函数的参数的值,故有closure之名。
浙公网安备 33010602011771号