函数防抖
在监听一些事件(如 oninput, onresize)的时候不希望一直触发,就想在操作完成(输入完毕、resize完毕)之后执行一次方法,这时可以使用 setTimeout 来进行防抖控制
<input type="text" oninput="onInput(this)">
var timer = null
function onInput(e) {
clearTimeout(timer);
timer = setTimeout(function(){
console.log(e.value);
}, 1000)
}
函数节流
节流是让函数在特定时间内只执行一次
var canRun = true;
document.getElementById("app").onscroll = function(){
if(!canRun) return;
canRun = false
setTimeout( function () {
console.log("函数节流")
canRun = true;
}, 1000)
}
函数防抖和节流都是防止函数重复高频执行,
区别:
- 防抖是在特定时间内函数不再重复调用后执行
- 节流是在特定时间内函数只执行一次