JavaScript 闭包(个人浅谈)

JavaScript 闭包浅谈

解释:

能够访问另一个函数作用域的变量的函数,(即重用一个变量,又保护变量不被污染的一种机制。)
(闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。)

优点:

1、读取函数内部的变量;
2、这些变量的值始终保持在内存中(长期驻扎),不会在外层函数调用后被自动清除。
3、避免全局变量的污染;
4、私有成员的存在

缺点:

1、常驻内存 会增大内存的使用量 使用不当会造成内存泄露
解释:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2、闭包会在父函数外部,改变父函数内部变量的值。

//解决方法
闭包不在使用时,要及时释放。(将引用内层函数对象的变量赋值为null。)

实例1(简单创建闭包):

function outFun() {
     var  a = 'variable'
     var  inFun = function () {
            console.info(a)
     }
    return inFun// inFun就是一个闭包函数,因为他能够访问到outFun函数的作用域中的变量
}

实例2(普通函数和闭包创建计数器比较):

//普通函数
var count = 0;
function add() {
  count = count + 1;
  console.log(count);
}
add();	//实现了需求,但是当计算器在增加时就不行了


//闭包,
function addCount() {
  var conut = 0;
  return function() {
    count = count + 1;
    console.log(count);
  };
}
var fun1 = addCount();
    fun1(); //1
    fun1(); //2
var fun2 = addCount();
    fun2(); //1
    fun2(); //2
   //addCount() 执行的时候, 返回一个函数, 函数是可以创建自己的作用域的, 但是此时返回的这个函数内部需要引用 addCount() 作用域下的变量 count, 因此这个 count 是不能被销毁的.接下来需要几个计数器我们就定义几个变量就可以,并且他们都不会互相影响,每个函数作用域中还会保存 count 变量不被销毁,进行不断的累加

小弟是新手,如有不对,欢迎评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值