你的位置:首页 > Java教程

[Java教程]再谈JavaScript闭包及应用


写在前面

本文章版权归博客园和作者共同所有,转载请注明原文地址博客园吴双 http://www.cnblogs.com/tdws/

闭包真的是学过一遍又一遍,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/

 

写在最后

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

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

 

如果你觉得我的点滴分享,对你有点滴帮助,欢迎点击下方红色按钮关注,我将持续分享。也欢迎点下推荐,为我,也你自己点赞。

 




深圳二日游攻略大全深圳好玩的旅游景点深圳及周边旅游景点深圳两日游景点报价深圳旅游线路报价优惠千泷沟大瀑布官网,从化千泷沟大瀑布官方网站。 峡谷秘境九路寨 荆山深处的世外桃源 千泷沟大瀑布门票2015-3-5月从化千泷沟大瀑布门票价格 千泷沟大瀑布怎么走?从化千泷沟大瀑布门票多少钱? 十一月去苏梅岛需要带什么衣服? 天降长假哪里去随州看千年银杏谷 石家庄有什么好玩的地方呢?石家庄秋天去哪赏红叶? 天降长假哪里去 大悟观婀娜多姿乌桕 石根山门票价格?信宜石根山团购优惠吗? 澳门环岛要出境吗?珠海澳门环岛起点和终点在哪里? 澳门环岛夜游门票价格?珠海澳门环岛夜游门票包含什么? 珠海澳门环岛船游门票多少钱?澳门环岛船游网上可以预订吗? 苍岩山在哪?怎么去? 亚龙湾森林公园门票多少钱?三亚亚龙湾森林公园本地身份证有优惠吗? 盘点北京周边8大露营地 天地为家式的流浪旅行 亚龙湾森林公园攻略?三亚亚龙湾森林公园门票包含什么? Q65110A9210 Datasheet Q65110A9210 Datasheet Q65110A9211 Datasheet Q65110A9211 Datasheet Q65110A9212 Datasheet Q65110A9212 Datasheet 北京一日游哪里好玩 北京一日游哪里好玩 北京一日游哪里好玩 三亚水果批发市场 三亚水果批发市场 三亚水果批发市场 羊台山森林公园 羊台山森林公园 羊台山森林公园