闭包(一)

闭包的概念十分的抽象,直接上干货吧

function A(){
  var num=0;
  function B(){
	console.log(++num);
  }
  return B;
}
var C=A();
C();//1
C();//2
C();//3
在这段代码中,B是在函数A内部声明的函数,但是因为A中将B给return了出去,所以在A外部声明的var C=A(),相当于将C指向了函数B,这就形成了闭包。简单的说,就是内部的函数被外部的变量引用,这就是闭包。

因为内部函数B在外部被引用,所以A内部的变量num不会被释放(涉及到JavaScript的内存回收机制),A的内部就形成了一个相对独立的环境。多次C()的执行,相当于在A的这个环境内,多次执行了B方法。所以,num的值因为每次都执行了++num而变化。

再来稍微深入一点点

function A(){
  var num=0;
  function B(){
	console.log(++num);
  }
  return B;
}
var C=A();
C();//1
C();//2
C();//3
var D=A();
D();//1
D();//2
C();//4
可以看到在执行方法D的时候,num的值又是重新从0开始,但是再执行第四次C的时候,输出的却是4,这说明了什么?

说明了两次闭包的形成各自被赋予了一块独立的内存,两块内存之前互不干扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值