详谈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 相关文章推荐
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
Aug 01 Javascript
js获取上传文件大小示例代码
Apr 10 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
JavaScript驾驭网页-获取网页元素
Mar 24 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
javascript简单进制转换实现方法
Nov 24 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
Feb 15 Javascript
利用vue.js插入dom节点的方法
Mar 15 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
Jun 09 jQuery
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
Sep 01 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
PHP添加MySQL数据记录代码
2008/06/07 PHP
PHP应用JSON技巧讲解
2013/02/03 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
PHP代码加密的方法总结
2020/03/13 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
Django中Model的使用方法教程
2018/03/07 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
竞选班长演讲稿
2013/12/30 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
解放思想演讲稿
2014/09/11 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python