点击一个按钮弹窗,我们希望,每次弹窗都是这个窗口,这个窗口只创建一次,后续调用可以直接使用上一次创建的结果,不用再次创建。 此时就可以运用闭包实现单例模式
<body>
<button id="block"></button>
<script>
// 创建弹窗
var createBlock = function() {
var div = document.createElement("div")
div.innerHTML = '弹窗'
div.style.display = 'none'
document.body.appendChild(div)
return div
}
// 单例
var getSingle = function(fn) {
var result
return function() {
// 如果result没有值就创建一个新的弹窗,
// 如果有,就使用上一个值
return result || (result = fn.apply(this, arguments))
}
}
var create = getSingle(createBlock)
document.getElementById("block").onclick = function() {
var getBlock = create
getBlock.style.display = 'block'
}
</script>
</body>
getsingle() 内部的函数被保存到了create中,并且 其内部的数据result也可以随时被访问到,弹窗第一次被创建时便保存到了result中。 单例模式解决了一个全局使用的类,频繁创建和销毁占用的内存过大的问题。内存中只有一个实例,减少了内存的开销 组件化概念也与闭包的单例模式有关。
关于闭包的理解:juejin.cn/post/699656…