2021-06-28 闭包应用

2021-06-28  本文已影响0人  0说
let test = function() {
          let cache = {}
            // 这里提到这边可以跟下面的函数 解开 耦合关系
            let countTotal = function() {
                let a = 1
                for(let i = 0; i < arguments.length; i++) {
                   a *= arguments[i] 
                }
                return a
            }
            return function() {
                // arguments 没有join函数 利用Array的方法来做到join
                let arg = Array.prototype.join.call(arguments, ',')
                // 查看有没有缓存
                if(cache[arg]) {
                    console.log('走缓存了')
                    return cache[arg]
                }
                return cache[arg] = countTotal.apply(null, arguments)
            }
        }()
        console.log(test(1, 2, 3))
        console.log(test(7, 8, 9))
        console.log(test(1, 2, 3))

// 命令模式  解耦
        // 事件对象
        let TV = {
            open() {
                console.log('打开电视');
            },
            close() {
                console.log('关闭电视');
            }
        }
        // 执行事件
        let DoSome = function(tv) {
            let open = function() {
                return tv.open()
            }

            let close = function() {
               return tv.close()
            }

            return {
                open,
                close
            }
        }
        // 绑定事件
        let mount = function(action) {
            document.getElementById('open').onclick = function() {
                action.open()
            }
            document.getElementById('close').onclick = function() {
                action.close()
            }
        }

        mount( new DoSome( TV ) )

上一篇下一篇

猜你喜欢

热点阅读