初探闭包及例子

每次外部函数执行完,就会被内存彻底销毁,所以每次调用外部函数都是创建了一个新的地址指针,即一个全新的函数,对变量是没有保存功能的;而闭包则不会被销毁,也就拥有了保存功能,会将外部函数最终得到的值存储下来。

下面有几个例子增加理解:

1、闭包的存储功能

// 正例
var a = 0;
function outerFn(){
    return function innnerFn(){
        a++;
        console.log(a);
    };
}
var inner = outerFn();
inner();
// 反例
var a1 = 0;
function outerFn1(){
    a1++;
    return function innnerFn1(){
         console.log(a1);
    };
}
var inner1 = outerFn1();
inner1();

2、外部函数地址指针变化

function outerFn3(){
    var b = 3;
    return function innerFn3(){
        return ++b;
    };
}
// 正例
var inner3 = outerFn3();
inner3();
// 反例
outerFn3()();

3、自执行函数

var outerFn4 = (function() {
   var  c = 4;
   return function innerFn4(){
      return ++c;
   };
})();
outerFn4();

 

以下是个人思考,有不对的请多多指教。


对应思考:

1、闭包的存储功能

var inner = outerFn(); 调用了一次外部函数,之后无论是 inner() 还是 inner1() 都是在执行闭包。如果闭包不具备保存功能,那么两个应该都是1。

2、外部函数地址指针变化

outerFn3()();每次被执行,外部函数也都被执行,那么b就被重新赋值成3,再执行闭包也是在3的基础上++,所以每次都是4。

3、自执行函数

自执行即外部函数被调用一次,那之后执行的 outerFn4() 也是执行闭包。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值