美文网首页
如何理解js中的闭包

如何理解js中的闭包

作者: 开发者老岳 | 来源:发表于2017-07-29 16:17 被阅读23次
function a(){
var i=0;
function b(){
  alert(++i);
}
return b;
}
var c=a();
c();

特点

这段代码有两个特点:
1、函数b嵌套在函数a内部;
2、函数a返回函数b。

  • 这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
    当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

作用

  • 简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
  • 在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
  • 那么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被回收。

其他参考:http://kb.cnblogs.com/page/110782/

相关文章

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • 如何理解js中的闭包

    特点 这段代码有两个特点:1、函数b嵌套在函数a内部;2、函数a返回函数b。 这样在执行完var c=a( )后,...

  • 如何理解js闭包?

    做为一个前端程序员,js中有一个重要的概念:闭包。闭包对于大部分的初学者来说理解起来十分的困难和晦涩,它成了新手成...

  • 理解js中的闭包

    闭包是什么 保留局部变量不被释放的代码块,称为一个闭包 在js中,变量的作用域属于函数的作用域,由于函数在执行完毕...

  • js 中 闭包 的理解

    定义:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(函数),因而这些变量也是该表达式的一部分 个人理解:如...

  • 理解js中的闭包

    使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量...

  • 一分钟理解js闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 一分钟带你弄懂闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 什么是闭包?几分钟告诉你

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 一分钟带你弄懂闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

网友评论

      本文标题:如何理解js中的闭包

      本文链接:https://www.haomeiwen.com/subject/kqlclxtx.html