1 /*
2 闭包:
3 外函数返回一个内函数,内函数用到外函数的局部变量,
4 这种情况下,外函数运行结束后,不会回收临时变量资源,会留给内函数使用。
5
6 */
7
8 //外函数里 返回一个内函数,内函数用到外函数的临时变量x
9 //外函数结束时候,会把x绑定给内函数,因为内函数会用到
10 function enclosure( x ){
11 return function(y){
12 x+= y;
13 return x;
14 };
15 };
16
17 //在这里用 用e接收了一个绑定x是10的内匿名函数,
18 e = enclosure(10);
19 // 之后再调用这个内函数的时候,每次都修改了同一个x,因为他们的闭包变量是被同一次创建的
20 alert(e(1)); //11
21 alert(e(2)); //13
22
23
24 //这里连续两次创建新的闭包变量和内部函数,所以使用的不是同一个闭包变量
25 alert( enclosure(10)(1) ); //11
26 alert( enclosure(10)(2) ); //12