详谈JavaScript的闭包及应用

发布时间 - 2026-01-10 22:34:57    点击率:

闭包真的是学过一遍又一遍,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闭包典型应用  # 关于Javascript闭包与应用的详解  # js核心基础之闭包的应用实例分析  # JS闭包原理与应用经典示例  # JavaScript闭包的简单应用  # javascript 闭包详解及简单实例应用  # JS 循环li添加点击事件 (闭包的应用)  # JavaScript闭包的深度剖析与实际应用小结  # 全局变量  # 向外  # 它将  # 的是  # 也不  # 我还  # 你可以  # 多个  # 你会  # 是由  # 域外  # 感觉到  # 我又  # 你不  # 一遍  # 我一直  # 而成  # 要做  # 我将  # 博大精深 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何安全更换建站之星模板并保留数据?  javascript基于原型链的继承及call和apply函数用法分析  如何破解联通资金短缺导致的基站建设难题?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  教你用AI润色文章,让你的文字表达更专业  北京企业网站设计制作公司,北京铁路集团官方网站?  简历没回改:利用AI润色让你的文字更专业  如何快速使用云服务器搭建个人网站?  如何在新浪SAE免费搭建个人博客?  高防服务器租用指南:配置选择与快速部署攻略  Laravel如何处理异常和错误?(Handler示例)  如何获取PHP WAP自助建站系统源码?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  实例解析angularjs的filter过滤器  创业网站制作流程,创业网站可靠吗?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel如何配置任务调度?(Cron Job示例)  JS弹性运动实现方法分析  微信小程序 闭包写法详细介绍  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何快速建站并高效导出源代码?  如何用wdcp快速搭建高效网站?  如何在阿里云通过域名搭建网站?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何在云服务器上快速搭建个人网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  中山网站推广排名,中山信息港登录入口?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  在线教育网站制作平台,山西立德教育官网?  高防服务器如何保障网站安全无虞?  Mybatis 中的insertOrUpdate操作  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  ,怎么在广州志愿者网站注册?  详解vue.js组件化开发实践  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  如何选择PHP开源工具快速搭建网站?  如何在阿里云购买域名并搭建网站?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel如何创建自定义Facades?(详细步骤)  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  高防服务器:AI智能防御DDoS攻击与数据安全保障