// 深拷贝
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)
}
}
}
手写深拷贝,防抖,节流
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- new 创建一个空的简单JavaScript对象(即{}); 链接该对象(即设置该对象的构造函数)到另一个对象 ;...
- 对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...
- 1.数组扁平化初探 ES6中数组的扩展引入了flat和flatMap:数组的flat方法: 数组的flatMap方...
- 数组扁平化 数组扁平化:使用递归实现 将每一项遍历,如果某一项为数组,则让该项继续调用,这里指定了depth作为扁...