我理解的闭包

讲真 这个纯粹是学习笔记   因为说实话 以我的功力  在实际项目中能很好的运用闭包还真的是个问题  但是感觉作为前端  不理解闭包真是个没有职业操守的事情


所以我就学习了一下   首先  是变量的作用域  js中变量的作用域一共也就两个  全局变量跟局部变量  

                         函数内部可以读取全局变量   但是在函数外部却无法读取函数内部的局部变量

                       所以如何从函数外部读取函数内部的局部变量呢  这就是个问题了  既然考虑到之前说的  函数内部可以读取函数外部的全局变量  那么 是不是可以在函数内部构造一个函数呢 


写个例子哈    function f1(){

                 var a=1;   //比如你想在函数外部读取这个变量a的值  你得咋办   很好办啊  你让它作为另一个函数的全局变量                    function f2(){

                       alert(a);

                         }

                  return f2();

                         }

这样你再调用f1的时候  自然会弹出a的值了 然后这个里边f2其实就是一个闭包  所以我理解的闭包就是能够读取其他函数内部变量的函数  。根据js的变量作用域概念 只有函数内部的子函数才能读取函数内部的变量 所以 闭包也可以理解为定义在函数内部的子函数

这里在插播一句  闭包是啥  闭包是函数的一种  this是啥  this是个对象  

说了这多 也应该说说闭包的作用了  第一当然就是读取函数内部的变量  第二就是能够让这些变量保存在内存中


下面请看这个例子

function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){
      alert(n);
    }

    return f2;

  }

  var result=f1();

  result(); // 999

  nAdd();

  result(); // 1000

这里f2可以读取到f1内部的变量n的值 第一遍运行result()的时候  弹出n=999;  注意 nAdd=function(){n+=1}前边没有var  说明是全局的

然后执行了一边nAdd()这个函数  

看弹出结果 可以看出来 这里边第一次执行完f1之后  n一直保存在内存中;也就是说f1中的局部变量并没有在运行完之后自动清除  



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值