基础代码: let num = 1; function aaa() { num++; console.log(num); } 不加防抖时的代码: window.onmouseover = aaa 设置防抖,在onmouseover事件触发1秒后再打印: function debounce(func,wait) { let timeout; return function () { clearTimeout(timeout); //每次必执行 timeout = setTimeout(() => { func() }, wait); }; } window.onmouseover = debounce(aaa,1000); 设置防抖,多加了一个imdt传参判断是否立即执行打印: function debounce(func, wait, imdt) { // imdt为true时,立即实行,imdt为false时,在mouseover事件停止之后的一秒再执行 var timeout; return function () { clearTimeout(timeout); //每次必执行 if (imdt) { var callNow = !timeout timeout = setTimeout(() => { timeout = null; }, wait); if (callNow) { func(); } } else { timeout = setTimeout(() => { func(); }, wait); } }; } window.onmouseover = debounce(aaa, 1000, true); 节流的还没捣鼓,有空再搞。。。