js 闭包

1、变量:局部变量仅在函数内用, 不可重用;全局变量随处可用, 易被污染。

2、概念:保护并重用局部变量的机制

  a) 定义受保护的局部变量
  b) 定义内层函数专门操作受保护的变量
  c) 定义外层函数将受保护的变量和操作变量的函数封装起来,外层函数将内层函数返回到外部

3、何时使用: 重用一个变量,又不希望被污染时-保护局部变量

例: 

1.

function f1(){
  var i = 30;
  function f2(){
    i++;
    console.log(i);
  }
  return f2;
}
var rs = f1();//f1返回的是一个函数
rs();//31 -- i=31
rs();//32--之前的值未释放

2.

function fun(){
  var arr =[];
  for (var i=0; i<3 ; i++){
    arr[i]= function(){
      return i;
    }
  }
  //console.log(i);i=3
  return arr;  //返回数组3个元素
}
//console.log(i);undefin
var funs=fun();
console.log(funs); //[function, function, function]
console.log(funs[0]); //function (){ return i;}
console.log(funs[0]()); //3
console.log(funs[1]()); //3
console.log(funs[2]()); //3

posted @ 2017-08-07 22:29  lijun8637  阅读(183)  评论(0)    收藏  举报