1.节流与防抖
封装节流函数
节流(节约流量):在一段时间内,函数只能调用一次(如果函数多次被触发,最后只调用一次)。
原理:利用时间差。
function throttle(fn, delay) {
var lastTime = 0;
return function() {
var nowTime = Date.now();
if(nowTime - lastTime >= delay) {
fn.call(this);
lastTime = nowTime;
}
}
}
封装防抖函数
防抖:函数在一段时间之后才能被触发。
原理:利用定时器。
function debounce(fn, delay) {
var timer = null;
return function() {
clearTimeout(timer);
timer = setTimeout(() => {
fn.call(this)
}, delay);
}
}
```javascript
2.深浅拷贝
浅拷贝
注:拷贝的对象会随着被拷贝的对象发生改变而改变(地址指向同一个对象)
深拷贝
注:拷贝的对象不会随着被拷贝的对象发生改变而改变,它是独立存在的(两个变量的地址指向也不一样)
//深拷贝
function deepClone(newObj, oldObj) {
for(var k in oldObj) {
var item = oldObj[k];
// 判断属于数组
if(item instanceof Array) {
newObj[k] = [];
deepClone(newObj, item)
}
// 判断属于对象
else if(item instanceof Object) {
newObj[k] = {};
deepClone(newObj[k], item)
}
// 如果属于常量
else {
newObj[k] = item;
}
}
}
//浅拷贝
function shallowCopy(src) {
var dst = {};
for(var prop in src) {
if(src.hasOwnProperty(prop)) {
dst[prop] = src[prop]
}
}
return dst
}