js 函数闭包探索

js 函数闭包

经典案例

 function fisrtFn(){
            var a = 123
        
            function twoFn(){
                var b = 456
                console.log(a)
            }
            
            return twoFn
        }
        var fa = fisrtFn()
        fa()

函数
闭包函数 的包含关系 作用域套作用域 在调用外层函数声明的局部变量时 在函数再次调用时函数调用的变量不是 初值 是改变过后的值 有点全局变量的意思 但是确实是局部变量 的声明方式 要注意

函数能够持久保存自己定义时的所处环境,并且即使自己在其他的环境被调用的时候,依然可以访问自己定义时所处环境的值。

一个函数可以把它自己内部的语句,和自己声明时所处的作用域一起封装成了一个密闭环境,我们称为“闭包” (Closures)。

每个函数都是闭包,每个函数天生都能够记忆自己定义时所处的作用域环境。但是,我们必须将这个函数,挪到别的作用域,才能更好的观察闭包。这样才能实验它有没有把作用域给“记住”。

我们发现,把一个函数从它定义的那个作用域,挪走,运行。嘿,这个函数居然能够记忆住定义时的那个作用域。不管函数走到哪里,定义时的作用域就带到了哪里。这就是闭包。

闭包在工作中是一个用来防止产生隐患的事情,而不是加以利用的性质。

闭包的性质
每次重新引用函数的时候,闭包是全新的。

  function outer(){

  var count = 0;

  function inner(){

  count++;

  console.log(count);

  }
  return inner;

  }

 

 var inn1 = outer();

  var inn2 = outer();
 

 inn1(); //1

 inn1(); //2

 inn1(); //3

 inn1(); //4

 inn2(); //1

 inn2(); //2

 inn1(); //5

不会因为再次调用而发生初始化的情况 (不是道和构造函数有什么关系 等研究一下 有点那个味了)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值