闭包实现:单例模式弹窗

387 阅读1分钟

点击一个按钮弹窗,我们希望,每次弹窗都是这个窗口,这个窗口只创建一次,后续调用可以直接使用上一次创建的结果,不用再次创建。 此时就可以运用闭包实现单例模式

<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…