详谈JavaScript的闭包及应用


Posted in Javascript onJanuary 17, 2017

闭包真的是学过一遍又一遍,Js博大精深,每次学习都感觉有新的收获。相信在大家封装前端插件时,闭包是必不可少的。闭包的真正好处我个人认为除了封装还是封装,能带个我们私有方法,和调用上的灵活方便,也会使你的代码对外的对象保持干净整洁。

进入正题

维基百科这样定义了JS闭包:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

通俗的讲,闭包不同于一般函数,它允许一个函数在立即此法调用的作用域外,仍可访问非本地变量。我还想说,闭包的语法让你的代码更加动感,下面的一段代码可能会让你有所感触。

<script>
 (function () {
 var userToken = "this is my token";
 var someConfig = "opening some function";
 var privateValue = "private";
 var publicValue = "public";
 var appObj = {};
 function myPrivateFunc() {
 alert(privateValue)
 }
 appObj.getUserToken = function () {
 //some logic
 userToken += " after some inner logic";
 return userToken;
 }
 appObj.publicVal = publicValue;
 window.application = appObj;
 }());//立即执行
 console.log(application.getUserToken());//this is my token after some inner logic
 console.log(application.publicVal);//public
 console.log(application.privateValue); //undefined
 application.myPrivateFunc(); //error
 </script>

我将appObj附加到window下面,我通常喜欢定义一个全局的名为application的对象,代表着整个应用公用的顶级对象,你可以在其中向外暴露很多公共的操作方法,也可以在其中做一些私有的处理,以防外部调用导致某些问题。在所定义的“顶级”application对象下,你也可以将你所非要不可的全局变量定义在其中,这样以防普通全局变量对应用造成的影响,又可以在你定义的闭包内,通过向外暴露的对象表达更明确的信息,我一直认为,随随便便定义一个JS全局变量实在是太可耻了。

闭包的写法加上VS强大的智能提示,你会感觉到无比的畅快。下面我又附加了一个方法

(function () {
 var baseUrl = "www.cnblogs.com/tdws/";

 application.getBaseUrl = function () {
 return baseUrl;
 }
 }());
 console.log(application.getBaseUrl());//www.cnblogs.com/tdws/

详谈JavaScript的闭包及应用

写在最后

你不觉得把变量保留起来,暴露出一系列get方法,很动感吗 ?(?-?)? 摊手......

当然闭包也需要你恰当的使用,不要造成循环引用,因为它将导致内存泄漏。不要做无谓的闭包,造成你空间的浪费,因为闭包不会被释放。不要处处闭包,因为它将增加你代码的复杂性。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
Mar 03 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
深入理解angularjs过滤器
May 25 Javascript
jQuery中JSONP的两种实现方式详解
Sep 26 Javascript
js 原型对象和原型链理解
Feb 09 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
JavaScript使用ZeroClipboard操作剪切板
May 10 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
angular2 NgModel模块的具体使用方法
Apr 10 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
用原生js做单页应用
Jan 17 #Javascript
js cookie实现记住密码功能
Jan 17 #Javascript
angularjs ocLazyLoad分步加载js文件实例
Jan 17 #Javascript
微信小程序 登陆流程详细介绍
Jan 17 #Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 #Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 #Javascript
js处理层级数据结构的方法小结
Jan 17 #Javascript
You might like
删除无限级目录与文件代码共享
2006/07/12 PHP
十天学会php之第二天
2006/10/09 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
详解Django rest_framework实现RESTful API
2018/05/24 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
自我评价200字分享
2013/12/17 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
大学总结自我鉴定
2014/01/18 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
生产操作工岗位职责
2014/09/16 职场文书
2014年工人工作总结
2014/11/25 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
吴仁宝观后感
2015/06/09 职场文书