防抖、节流、深拷贝

<script>
    // 防抖 以最后一次输入为准
    var textobj = { a: 1, b: 2 }
    var request = function () {
        console.log(this.a+this.b)
    }
    var debounce = function (fn, delaytime) {
        let timer
        return function () {
            clearTimeout(timer)
            timer = setTimeout(() => {
                fn.call(textobj)
            }, delaytime)
        }
    }

    document.querySelector('.in').addEventListener('input', debounce(request, 1000))
// 节流 规定时间内只让第一次触发生效,后面的不生效
    var throttle = function(fn,delay) {
        var lasttime = 0
        // 闭包防止每次调用lasttime都为0
        return function() {
            var nowtime = new Date().getTime()
            if(nowtime - lasttime >delay){
                fn.call(textobj)
                lasttime = nowtime
            }
        }
    }
    document.querySelector('.in').addEventListener('input',debounce(request,1000))

    // 深拷贝
    function deepClone(obj) {
        let cloneObj
        if(obj && typeof obj !== 'object'){
            cloneObj = obj
        }
        if(obj && typeof obj == 'object') {
            cloneObj = Array.isArray(obj) ? []:{}
        }
        for (let key in obj){
            if(obj.hasOwnProperty(key)) {
                if(obj[key] && typeof obj[key] == 'object') {
                    cloneObj[key] = deepClone(obj[key])
                }else{
                    cloneObj[key] = obj[key];
                }
            }
        }
        return cloneObj
    }
    console.log(deepClone({
        x: 1,
        y: [ 5, 6, 7 ],
        z: {
            a: 0,
            b: 1
        }
    }))

    var obj = 1
    var obj2 = obj
    obj2 = 2
    console.log(obj2)
    console.log(obj)
</script>

 

posted @ 2021-01-19 15:15  王坤龙  阅读(56)  评论(0)    收藏  举报