闭包(一)

来源:互联网 发布:魔兽世界7.0画面优化 编辑:程序博客网 时间:2024/05/05 09:24

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

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

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

原创粉丝点击