掌握闭包closure (含义及优缺点)
个人认为闭包其实非常好理解,我们一起去认识什么是闭包。
在javascript脚本语言中,变量的作用域只有两种,一种是全局变量,一种是局部变量。
全局变量的函数可以在整个javascript脚本语言中被引用,但是局部变量只存在于声明这个变量的函数内部,外部函数无法访问。
也就是说局部变量可以访问外部变量,外部函数无法访问局部变量。
在js中,只有在声明这个变量函数内部的子函数才能读取局部变量。
所以当我们需要得到函数内的局部变量时,就只能在函数的内部再定义一个函数,且这个子函数不接受任何参数。这就是闭包。它是能够读取其他函数内部变量的函数,把函数内部和外部接连起来的一座桥梁
闭包的用途:
1.可以读取其他函数内部的变量。
2.让变量的值始终保持在内存中。
闭包的好处:
1.不增加额外的全局变量。
2.执行过程中所有变量都是在匿名函数内部。
闭包的缺点:
1.闭包会使得函数中的变量都被保存在内存中,内存消耗大。
不能随意滥用闭包,否则会照成网页的性能问题,在IE中
可能会导致内存泄漏,解决方法是,在退出函数之前,把不使用
的局部变量全部删除
2.闭包会在父函数外部,改变父函数内部变量的值。
不能随便改变父函数内部变量的值。
原文:https://blog.csdn.net/DreamsTom/article/details/53857477
掌握闭包closure (含义及优缺点)的更多相关文章
- 聊一下JS中的作用域scope和闭包closure
聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...
- 闭包(closure)与协程共用时要注意的事情
闭包是一种能够让你用非常舒服的方式来编程的小技巧,Go也支持闭包. 假设从来没有接触过闭包,想在一開始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过.用过它,你才干真正的 ...
- JavaScript闭包(Closure)
JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...
- 深入理解JavaScript闭包(closure)
最近在网上查阅了不少javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...
- [转] Java内部类之闭包(closure)与回调(callback)
闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...
- JavaScript 进阶(四)解密闭包closure
闭包(closure)是什么东西 我面试前端基本都会问一个问题"请描述一下闭包".相当多的应聘者的反应都是断断续续的词,“子函数”“父函数”“变量”,支支吾吾的说不清楚.我提示说如 ...
- [转载]学习Javascript闭包(Closure)
学习Javascript闭包(Closure) 源地址: http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures ...
- Swift语言精要-闭包(Closure)
闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. ...
随机推荐
- vue里的watch 和 computed 监听的不同
1.computed里是偏向于通过监听data里的值变化后,经过运算返回一个新的计算结果, 所以k不能与data里的k重名,并且必须有return, 能够缓存,依赖的值不变化不会进行重复计算: 而wa ...
- Tomcat部署工程需注意的三点
Tomcat部署工程需注意: 1.如果该服务器是第一安装Tomcat,则各位大人应将该Tomcat的解压文件夹 backup 一份,已被不时之用.2.部署时应当注意修改Tomcat安装目录中conf文 ...
- J2EE快速开发框架
地址: http://git.oschina.net/blind/app 项目简介 使用Maven对项目进行模块化管理,提高项目的易开发性.扩展性. 实现了通用的系统管理模块功能,包含:用户.角色.权 ...
- PHP实现 手机号码归属地查询
在工作中需要对手机号码进行归属地查询,就在网上找了下解决方案,发现通过号段非常好判断. 我将数据库文件放到了百度网盘,请有需要的朋友去下载. 链接: https://pan.baidu.com/s/1 ...
- Redis的数据结构之List
存储list: ArrayList使用数组方式 LinkedList使用双向链接方式 双向链接表中增加数据 双向链接表中删除数据 存储list常用命令 两端添加 两端弹出 扩展命令 lpush 方式添 ...
- javaweb(1)之tomcat使用
安装 1.点击下载. 2.解压到一个目录. 3.进入解压后的 bin 目录,双击该文件夹下的 startup.bat 即可运行. 4.若运行成功,会有一个窗口悬停如下: 访问地址: localhost ...
- 关于Java8 Stream流的利与弊 Java初学者,大神勿喷
题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...
- utf8 vs utf8mb4
UTF-8 is a variable-length encoding. In the case of UTF-8, this means that storing one code point re ...
- Vue+element 实现文件导出xlsx格式
傻瓜教程: 第一步:安装两个依赖包 npm install --save xlsx file-saver 第二步:建立一个Vue文件,导入以下代码即可 <template> <d ...
- mongDb安装
1.下载安装包:https://www.mongodb.com/download-center#community 2.tar -xzvf mongodb-linux-x86_64-rhel70-3. ...