首页 > 代码库 > javascript学习笔记(三)——闭包

javascript学习笔记(三)——闭包

1.什么是闭包?

  闭包的特点:

  • 函数嵌套函数(内部函数、外部函数)
  • 内部函数可以引用外部函数的参数或者变量
  • 外部函数的参数或变量不会被js的垃圾回收机制收回  

  function aaa() {

    var a = 1;

    function bbb() {

      alert(a);

    }

    return bbb;

  }      

  var c = aaa();

  c();

 

=>表达式形式

(function() {

  var a = 1;

  return function() {

    alert(a);

  }

})();    

2.闭包有什么好处?

  • 希望一个参数或变量长期驻扎在内存中(不会被外部函数的垃圾回收机制所回收)
  • 避免全局变量的污染
  • 实现私有成员的存在

  

  function aaa() {

    var a = 1;

    a++;

    alert(a);

  }

  aaa();  //2

  aaa();  //2,   每次调用aaa(),a的值都从1开始,如果想每次调用aaa()实现a值得累加,怎么办呢?——闭包

=>function aaa() {

    var a=1;

    function bbb() {

      a++;

      alert(a);

    }

    return bbb;

  }

  var c= aaa();

  c();  //2

  c();  //3

  c(); //4  因为aaa()被执行后,变量a未被垃圾回收机制收回,而是驻扎在内存中,所以每次执行bbb(),a值就会在内存值得基础上加1

3.闭包的用法?

  • 代码的模块会,成员的私有化

  

var c= (function(){

  var a=1;

  function aaa() {

    a++;

    alert(a);

  }

  function bbb(){

    a++;

    alert(a);

  }

  return {

    aa : aaa,

    bb : bbb    

  }    

})();

c.aa();  //2

c.bb(); //3

alert(a); //报错,因为a私有化成员

alert(aaa()); //报错  

 

4.闭包在IE下容易引发内存泄漏

5.闭包的核心是对参数和变量的不会被js垃圾回收机制回收特性的利用。

 

javascript学习笔记(三)——闭包