首页 > 编程语言 > 详细

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

时间:2016-12-18 12:29:24      阅读:110      评论:0      收藏:0      [点我收藏+]

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学习笔记(三)——闭包

原文:http://www.cnblogs.com/jackyzhang20151122/p/6193934.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!