详谈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


相关推荐: Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何在腾讯云服务器快速搭建个人网站?  EditPlus中的正则表达式 实战(1)  西安专业网站制作公司有哪些,陕西省建行官方网站?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何在阿里云购买域名并搭建网站?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  如何在香港免费服务器上快速搭建网站?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何选择PHP开源工具快速搭建网站?  如何快速搭建支持数据库操作的智能建站平台?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  利用vue写todolist单页应用  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  微信小程序 wx.uploadFile无法上传解决办法  Linux后台任务运行方法_nohup与&使用技巧【技巧】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  高端云建站费用究竟需要多少预算?  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel如何创建自定义Facades?(详细步骤)  Laravel如何保护应用免受CSRF攻击?(原理和示例)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何在建站之星网店版论坛获取技术支持?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  专业商城网站制作公司有哪些,pi商城官网是哪个?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  如何在宝塔面板创建新站点?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  JavaScript如何实现音频处理_Web Audio API如何工作?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何在万网ECS上快速搭建专属网站?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  重庆市网站制作公司,重庆招聘网站哪个好?  网站制作免费,什么网站能看正片电影?  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在万网自助建站平台快速创建网站?