匿名函数与闭包的区别
来源:互联网 发布:收纳盒 知乎 编辑:程序博客网 时间:2024/05/16 07:55
匿名函数与闭包的区别
匿名函数:没有函数名称的函数;
这就是匿名函数:
function(argument1,argument2){}
闭包:一个可以使用另外一个函数作用域中的变量的函数。
如下面的代码函数b就是闭包,但是这个前提是:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。
意思是说b要变成闭包的话,就必须被外包所引用,即c引用:
<script type="text/javascript">function a(){ var i=1; function b(){ ++i; return i; } return b;}var c=a();alert(c());</script>
专业一点的说法就是:函数调用返回后一个没有释放资源的栈区;
一般,当函数执行完毕后,局部活动对象会被销毁,内存中仅保存全局作用域,但闭包的情况是不一样的。闭包的活动对象依然会保存在内存中,于是像上例中,函数调用返回后,变量i是属于活动对象里面的,就是说其栈区还没有释放,但你调用c()的时候i变量保存的作用域链从b()->a()->全局去寻找作用域var i声明所在,然后找到了var i=1;然后在闭包内++i;结果,最后输出的值就是2了;不知道这么说有没人明白,如果不明白,那么只要记住它的闭包的两个点就好了,一点就是闭包的活动对象没有被销毁;第二点是作用域链的关键是他要遇到var 声明;就好了····
共同点:他们都有是函数;除此之外没有任何共同点;
下面是,阮一峰
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?20120612141317#comments对闭包的解析;
闭包会携带它的函数的作用域,因此会比其他函数占用更多的内存,所以使用闭包要非常注意!!!
0 0
- 匿名函数与闭包的区别
- 匿名函数与闭包的区别
- 匿名函数与闭包的区别
- 匿名函数和闭包的区别
- javascript的匿名函数与闭包
- Scala 的 "匿名函数"与 "闭包"!
- 匿名函数与闭包
- 闭包与匿名函数
- 闭包与匿名函数
- Js的匿名函数与闭包特性
- javascript 闭包(closure) 与匿名函数的this
- php匿名函数与闭包的简单使用
- Go语言的匿名函数与闭包
- Javascript 匿名函数与闭包
- js:匿名与闭包函数
- JS之匿名函数与闭包
- js:匿名与闭包函数
- 匿名函数与闭包(closure)
- Linux基本命令-----------------------学习笔记
- [转载]Android分割线divider(内含Android虚线分割线失效成实线解决方案)
- 细心灵活
- StartSSl申请免费https证书
- Spring的AOP
- 匿名函数与闭包的区别
- openGL超级宝典第五版+VS2010/2012的环境配置
- Android超时机制的处理(很不错)
- 四则运算(非递归)
- oracle SCAN
- js之状态模式
- MFC OnClose
- maven中的依赖
- You must call removeView() on the child's parent first