个人认为闭包其实非常好理解,我们一起去认识什么是闭包。

在javascript脚本语言中,变量的作用域只有两种,一种是全局变量,一种是局部变量。

全局变量的函数可以在整个javascript脚本语言中被引用,但是局部变量只存在于声明这个变量的函数内部,外部函数无法访问。

也就是说局部变量可以访问外部变量,外部函数无法访问局部变量。

在js中,只有在声明这个变量函数内部的子函数才能读取局部变量。
所以当我们需要得到函数内的局部变量时,就只能在函数的内部再定义一个函数,且这个子函数不接受任何参数。这就是闭包。它是能够读取其他函数内部变量的函数,把函数内部和外部接连起来的一座桥梁

闭包的用途:
1.可以读取其他函数内部的变量。
2.让变量的值始终保持在内存中。
  闭包的好处:
1.不增加额外的全局变量。
2.执行过程中所有变量都是在匿名函数内部。
  闭包的缺点:
1.闭包会使得函数中的变量都被保存在内存中,内存消耗大。
不能随意滥用闭包,否则会照成网页的性能问题,在IE中
可能会导致内存泄漏,解决方法是,在退出函数之前,把不使用
的局部变量全部删除
2.闭包会在父函数外部,改变父函数内部变量的值。
不能随便改变父函数内部变量的值。

原文:https://blog.csdn.net/DreamsTom/article/details/53857477

掌握闭包closure (含义及优缺点)的更多相关文章

  1. 聊一下JS中的作用域scope和闭包closure

    聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...

  2. 闭包(closure)与协程共用时要注意的事情

    闭包是一种能够让你用非常舒服的方式来编程的小技巧,Go也支持闭包. 假设从来没有接触过闭包,想在一開始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过.用过它,你才干真正的 ...

  3. JavaScript闭包(Closure)

    JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...

  4. python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)

    1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...

  5. 深入理解JavaScript闭包(closure)

    最近在网上查阅了不少javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...

  6. [转] Java内部类之闭包(closure)与回调(callback)

    闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...

  7. JavaScript 进阶(四)解密闭包closure

    闭包(closure)是什么东西 我面试前端基本都会问一个问题"请描述一下闭包".相当多的应聘者的反应都是断断续续的词,“子函数”“父函数”“变量”,支支吾吾的说不清楚.我提示说如 ...

  8. [转载]学习Javascript闭包(Closure)

    学习Javascript闭包(Closure)     源地址: http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures ...

  9. Swift语言精要-闭包(Closure)

    闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. ...

随机推荐

  1. Python学习之旅(十二)

    Python基础知识(11):高级特性 一.分片(切片) 通过索引来获取一定范围内的元素 #字符串 s="Alice" s[0:4:2] 结果: 'Ai' #列表 l=[1,2,3 ...

  2. smartFloat

    $.fn.smartFloat = function() {     var position = function(element) {         var top = element.posi ...

  3. mybatis mapper-locations作用

    application上配置了@MapperScan(扫面mapper类的路径)和pom.xml中放行了mapper.xml后,配置mapper-locations没有意义 查找后得知,如果mappe ...

  4. Docker数据卷

    1.volume操作命名:docker volume Usage:    docker volume COMMAND Manage Docker volumes Options:       --he ...

  5. HashMap出现Hash DOS攻击的问题

    随着RESTful风格的接口普及,程序员默认都会使用json作为数据传递的方式.json格式的数据冗余少,兼容性高,从提出到现在已被广泛的使用,可以说成为了Web的一种标准.无论我们服务端使用什么语言 ...

  6. dex2jar反编译dex文件

    apk实际是一组文件的压缩包,修改为zip或rar后直接解压可以看到其内部内容,其中classes.dex就是java代码编译后的结果 dex2jar可以实现对该文件的反编译 dex2jar镜像地址: ...

  7. 目标检测(一)RCNN--Rich feature hierarchies for accurate object detection and semantic segmentation(v5)

    作者:Ross Girshick,Jeff Donahue,Trevor Darrell,Jitendra Malik 该论文提出了一种简单且可扩展的检测算法,在VOC2012数据集上取得的mAP比当 ...

  8. python摸爬滚打之day026----网络通信流程

    1.了解概念 C\S架构: 客户端(client)和服务端(server)之间的通信. B\S架构: 浏览器(browser)和服务端之间的通信. 为什么只用一个浏览器就可以访问很多网站?  这是因为 ...

  9. soapui调用redis,获取短信验证码

    1.首先,调用redis需要引入redis的jar包,放入到soapui指定目录中,例如我的目录D:\Program Files\SmartBear\SoapUI-Pro-5.1.2\bin\ext ...

  10. SPSS提示“列表中不允许存在字符串变量”的解决方法

    点击 查看 菜单->变量->将需要修改为数字类型的列属性改为数字,还可以更改小数位数