详谈JavaScript的闭包及应用

 更新时间:2017年01月17日 11:33:45   作者:坦荡  
本文主要介绍了JavaScript的闭包及应用。具有一定的参考价值,下面跟着小编一起来看下吧

闭包真的是学过一遍又一遍,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方法,很动感吗 ╮(╯-╰)╭ 摊手......

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

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

相关文章

  • JavaScript单链表详解与实现

    JavaScript单链表详解与实现

    链表是一种数据结构,用于存储和组织一系列元素,这些元素以节点的形式连接在一起,每个节点包含数据和一个指向下一个节点的引用,链表可以分为单链表、双链表和循环链表等不同类型,但在本文中,我们将重点关注单链表,需要的朋友可以参考下
    2023-09-09
  • 详解JS如何使用Promise缓存网络请求

    详解JS如何使用Promise缓存网络请求

    网络请求是现代Web应用中的常见操作,很多时候需要获取服务器上的数据,在进行网络请求时,为了减轻服务器的压力,缓存策略常被用来避免对同一数据的重复请求,本文将探讨如何使用Promise结合缓存来高效处理网络请求,需要的朋友可以参考下
    2023-12-12
  • 全面解析Bootstrap表单使用方法(表单控件状态)

    全面解析Bootstrap表单使用方法(表单控件状态)

    这篇文章全面解析了Bootstrap表单的使用方法,本文重点介绍Bootstrap表单控件状态的三种情况,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • js防抖和节流的深入讲解

    js防抖和节流的深入讲解

    这篇文章主要给大家介绍了关于js防抖和节流的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • JavaScript 代码压缩工具小结

    JavaScript 代码压缩工具小结

    为了使页面更快的完成加载,经常需要对javascript/css代码进行压缩以减小体积,这里简单列一下用过的压缩工具,同时也作为存档
    2012-02-02
  • JS常见构造模式实例对比分析

    JS常见构造模式实例对比分析

    这篇文章主要介绍了JS常见构造模式,结合实例形式对比分析了工厂模式、构造函数模式、原型模式、寄生构造函数模式、稳妥构造函数模式等相关概念、原理、实现方法与相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • ES6中如何使用Set和WeakSet

    ES6中如何使用Set和WeakSet

    这篇文章主要为大家详细介绍了ES6中如何使用Set和WeakSet的相关资料,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JS实现物体带缓冲的间歇运动效果示例

    JS实现物体带缓冲的间歇运动效果示例

    这篇文章主要介绍了JS实现物体带缓冲的间歇运动效果,可实现物体定时间歇运动的功能,涉及javascript定时器、数学运算及页面元素动态修改的相关操作技巧,需要的朋友可以参考下
    2016-12-12
  • ES6 Promise对象概念及用法实例详解

    ES6 Promise对象概念及用法实例详解

    这篇文章主要介绍了ES6 Promise对象概念及用法,结合实例形式详细分析了ES6中Promise对象的概念、原理、创建、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-10-10
  • webpack -v报错解决方案

    webpack -v报错解决方案

    这篇文章主要介绍了webpack -v报错解决方案,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09

最新评论