总结
在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: 蛤?