<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
// 防抖(debounce):触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间
// 举例:就好像在百度搜索时,每次输入之后都有联想词弹出,这个控制联想词的方法就不可能是输入框内容一改变就触发的,他一定是当你结束输入一段时间之后才会触发。
function debounce(fn, wait) {
let timer = null;
return function() {
let arg = arguments;
if(timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(() => {
fn.apply(this, arguments)
}, wait)
}
}
function clg() {
console.log('clg')
}
window.addEventListener('resize', debounce(clg, 1000))
// 节流函数:将多次执行变成每隔一个时间节点去执行的函数
// 举例:预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行。就好像你在淘宝抢购某一件限量热卖商品时,你不断点刷新点购买,
//可是总有一段时间你点上是没有效果,这里就用到了节流,就是怕点的太快导致系统出现bug。
function throttle(fn, time) {
let lastTime = true;
return function() {
if(!lastTime) {
return false
}
lastTime = false;
setTimeout(() => {
fn()
lastTime = true;
}, time)
// let nowTime = Date.now();
// console.log(nowTime - lastTime)
// if(nowTime - lastTime > time){
// fn();
// last = nowTime
// }
}
}
function sayHi() {
console.log('hi')
}
setInterval(throttle(sayHi, 5000), 500)
</script>
</body>
</html>