手写深拷贝,防抖,节流

// 深拷贝
function deepClone (obj) {
  // 制定一个新的数组或者对象
  let objClone = Array.isArray(obj) ? [] : {}
  // 判断传入的值是否为数组或对象
  if (obj && typeof obj === 'object') {
    // for in 遍历数组是key是下标 ,遍历对象时key是键
    // 递归多重循环互不影响
    for (let key in obj) {
      // Object.hasOwnProperty 是用来判断object中是否有该键
      if (obj.hasOwnProperty(key)) {
        if (obj[key] && typeof obj[key] === 'object') {
          // 第一次走的时候已经赋值
          objClone[key] = deepClone(obj[key])
        } else {
          // 第二次走这的时候objClone已经是对象了
          objClone[key] = obj[key]
        }
      }
    }
  }
  return objClone
}
// 防抖
function debounce (callback, time) {
  let timer
  return (...arg) => {
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
      callback.apply(this,arg)
    }, time)
  }
}

// 节流
function throttle (fn, time) {
  let lastDate = 0
  return (...arg) => {
    const now = Date.now()
    if (now - lastDate > time) {
      lastDate = now
      fn.apply(this, arg)
    }
  }
}

你可能感兴趣的:(手写深拷贝,防抖,节流)