闭包

之前在学习中,总会遇到一些问题,变量在函数外,或者在函数外的一些情况

作用域链和活动对象

 

1.闭包:有权访问另一个函数作用域中变量的函数

  创建闭包常见的方式:在一个函数内部在创建一个函数,比如内部函数

  在函数外调用了内部函数,并且还调用了内部函数的变量

  结果:1 1 1 1

每次都new一个内部变量,都加1

 1 function outerFn() {
 2         document.write("外部函数"+"<br/>");
 3         function inner() {
 4             var innerVar = 0;
 5             innerVar++;
 6             document.write("内部函数"+"<br/>");
 7             document.write("内部变量"+"intteVar=" +innerVar+"<br/>");
 8         }
 9        //通过返回内部函数
10         return inner;
11     }
12     //在函数外调用函数
13     var fnRef = outerFn();
14     fnRef();
15     fnRef();
16     var fnRef2 = outerFn();
17     fnRef2();
18     fnRef2();

全局变量

内部函数引用全局变量

结果:1 2 3 4

 1  var i = 0;
 2     function outer() {
 3         document.write("外部函数"+"<br/>");
 4         function inner() {
 5             i++;
 6             document.write("内部函数"+"<br/>");
 7             document.write("全局变量"+"i=" +i+"<br/>");
 8         }
 9         return inner;
10     }
11     var  out = outer();
12     out();
13     out();
14     var out2 = outer();
15     out2();
16     out2();

 结果:1 2 1 2

 1 function outer() {
 2         var i = 0;
 3         document.write("外部函数"+"<br/>");
 4         function inner() {
 5             i++;
 6             document.write("内部函数"+"<br/>");
 7             document.write("全局变量"+"i=" +i+"<br/>");
 8         }
 9         return inner;
10     }
11     var  out = outer();
12     out();
13     out();
14     var out2 = outer();
15     out2();
16     out2();

 

 

  

 

posted @ 2017-09-22 11:34  雪宝宝~  阅读(150)  评论(0)    收藏  举报