总结

在JavaScript 里, 单例解决的问题都可以用全局变量解决

复用, 节省资源

共用, 保留修改状态(初始化时没有的信息)

全局变量容易被覆盖的弊端可以用命名空间或闭包来解决

在真正使用时再赋值, 也解决了内存浪费, 即惰性的

JavaScript 这种单线程语言也是天生线程安全的

探讨过程

应用场景

比如所有小图片共用一个弹出层展示其大图

语义上每个小图都有自己的弹出层

实际上弹出层只有一个

// JavaScript 使用单例的场景, 例子

JavaScript 中, 全局变量和闭包都能做到单例

闭包会避免全局变量会被覆盖的弊端

惰性的, 在真正使用到的时候才加载进内存(创建唯一的实例), 称为惰性的

相对的是, 不管当前用不用都加载进内存的方式, 比如静态类

??? 侧重点是什么, 什么问题只能用单例来解决???

节省资源?

把信息放在更大的作用域中, 大家都拿得到就可以做到共用, 做到节省资源

或者直接用全局变量来做到复用

所以单单为了节省资源, 没必要探索一个单例的概念

保留修改状态(初始化时没有的信息)?

全局变量似乎也能解决

一种全局变量? 避免全局变量被覆盖的弊端?

可以使用命名空间来解决这个问题

window.myScopeID = {};
(function() {
	let global = window.myScopeID
	global.name = "Big head"
})();
(function() {
	let global = window.myScopeID
	console.log(global.name)
})()

可以使用闭包来阻止随意修改变量

function c() {
  let sound = "嘤嘤嘤"
  return function() {
    return sound
  }
}

console.log(c()())

let getSound = c()
console.log(getSound())

惰性?

声明一个全局变量, 在使用的时候再真正赋值, 这也可以称为惰性

线程安全?

JavaScript: 蛤?