0

0

JavaScript中利用闭包实现单例模式的编程实践

冷漠man

冷漠man

发布时间:2026-03-17 15:05:02

|

900人浏览过

|

来源于php中文网

原创

JavaScript闭包单例模式通过IIFE封装私有instance变量,提供getInstance接口确保全局唯一实例;首次调用创建并缓存,后续返回同一对象,支持懒加载和参数初始化,适用于轻量工具类。

javascript中利用闭包实现单例模式的编程实践

JavaScript中利用闭包实现单例模式,核心在于**用闭包封装私有实例变量,确保全局唯一访问入口**,避免污染全局命名空间,同时防止重复创建对象。

闭包封装实例,控制唯一性

通过立即执行函数(IIFE)创建闭包作用域,在其中声明一个私有变量保存实例。外部无法直接访问该变量,只能通过返回的函数接口获取实例。

  • 每次调用 getInstance 时,先检查私有 instance 是否已存在;若不存在,则 new 一次并缓存
  • 后续调用直接返回缓存的实例,保证内存中仅有一个对象
  • 构造函数可接受参数,但首次初始化后的参数将被忽略(或按需设计为允许重置)

基础实现示例

以下是一个简洁、可复用的闭包单例封装方式:

const Singleton = (function() {
  let instance = null;

  function createInstance() {
    return {
      data: Math.random(),
      getName() { return 'Singleton Instance'; }
    };
  }

  return {
    getInstance() {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    }
  };
})();

// 使用
const a = Singleton.getInstance();
const b = Singleton.getInstance();
console.log(a === b); // true

支持构造参数与延迟初始化

实际项目中常需传参初始化,且希望真正用到时才创建(懒汉式)。可在 getInstance 中接收参数,并在首次调用时完成初始化逻辑:

Listnr
Listnr

AI文本到语音生成器

下载

立即学习Java免费学习笔记(深入)”;

  • 首次调用 getInstance({ name: 'A' }) 时创建带配置的实例
  • 后续调用即使传不同参数,也只返回首次创建的实例(保持单例语义)
  • 如需强制重置,可额外暴露 clearInstance 方法(谨慎使用)

注意事项与适用场景

闭包单例适合轻量级工具类、状态管理器、日志记录器等无需复杂生命周期控制的模块。

  • 不适用于需要多实例配置差异大的场景(此时应改用工厂模式)
  • 注意闭包长期持有实例可能导致内存无法释放,尤其在 SPA 中需评估销毁时机
  • ES6 模块本身具有单例特性(import 多次仍为同一模块对象),简单场景下可优先使用模块导出代替手写单例

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

234

2025.12.24

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2009

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

681

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2440

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

49

2026.01.19

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

153

2025.07.29

c++ 字符处理
c++ 字符处理

本专题整合了c++字符处理教程、字符串处理函数相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号