js 手撕代码高频面试题
1、debounce(防抖)
触发高频时间后n秒内函数只会执行一次,如果n秒内高频时间再次触发,则重新计算时间。
const debounce = (fn, time) => { let timeout = null; console.log(‘我来了‘) // 我来了 return function() { // console.log(‘--aa--‘, timeout) clearTimeout(timeout) // timeout是定时器一个数字标识 // console.log(timeout,‘--bb--‘, clearTimeout(timeout)) timeout = setTimeout(() => { // console.log(‘过了3秒我才执行哦,中间有操作会被清0,重新被计时‘) fn.apply(this, arguments); }, time); // console.log(‘--cc--‘, timeout) } };
使用
function A(){ console.log(‘每隔3秒执行一次的函数中间有操作会被清0,重新被计时---test‘, new Date()) // console.log(‘test‘) } var testDebounce = debounce(A, 3000) // window.onresize = function(){ // testDebounce() // } window.onresize = testDebounce
timeout是定时器一个数字标识
每隔三秒执行一次,中间有操作会请0重新计时,也就是设定的时间就是执行最短时间