对闭包的一点理解

1、闭包:定义在一个函数内部的函数,内部函数可以通过作用域链访问外部函数的变量,外部函数将内部函数返回,(一个函数在定义它的作用域外部被引用)使变量在函数外可见。例如:
function f1(){
    var n=999;//本来作用域的限制使函数外无法直接访问此变量
    function f2(){
      alert(n);
    }
    return f2;//将内部函数返回
  }
  var result=f1();
    console.log(n);//报错,n is undefined
  result(); // 999

2、闭包的用途:

  • 读取函数内部的变量
  • 让这些变量的值始终保持在内存中(就是外部函数的活动对象一直没能被释放,始终占据这一片内存)
                function outer(){
	    		var a=999;
	    		nAdd=function(){a++}
	    		return function(){
	    			console.log(a);
	    		}
	    	}
	    	var result=outer();//result一直调用着outer返回的函数,导致outer函数的活动对象不能被释放,使变量一直保存在内存中
	    	result();//输出999
	    	nAdd();//nAdd定义的是全局变量,可以在函数外部被访问到,同时它也形成了一个闭包的结构,使函数内部的变量发生了改变
	    	result();//输出1000;改变之后的值

3、怎么创建闭包:

        1、在一个函数内部直接返回一个匿名函数,也可以先定义一个变量指向一个匿名函数,然后返回这个变量;

        2、在函数外部定义一个变量接住返回的函数。

        3、调用返回的函数

1、              function outer(){
	    		var a=999;
	    		return function(){//返回一个匿名函数
	    			a++;
	    			console.log(a)
	    		}
	    	}
	    	var result=outer();//定义一个变量接住返回的函数
	    	result();//调用返回的函数

2、              function outer(){
	    		var a=999;
	    		function inner(){
	    			a++;
	    			console.log(a)
	    		}
	    		return inner;//注意这里不能加括号,否则result()会报错,因为不能undefined()
	    	}
	    	var result=outer();
	    	result();


猜你喜欢

转载自blog.csdn.net/lncci/article/details/80179669
今日推荐