let timer; function oninput() { timer && clearTimeout(timer); timer = setTimeout(function () { console.log("第二个"); }, 2000); } document.getElementById("input2").oninput = oninput;和 function debounce(fn, delay) { let timer; return function () { const context = this; const args = arguments; timer && clearTimeout(timer); timer = setTimeout(function () { fn.apply(context, args); timer = null; }, delay); }; } function handleInput() { console.log("第一个"); } const event = debounce(handleInput, 2000); document.getElementById("input").oninput = event;详细说说这两段代码的区别
时间: 2024-02-14 16:33:08 浏览: 150
这两段代码都使用了防抖技术来延迟函数的执行。当事件被触发时,防抖函数会在一定的时间内等待,如果在等待时间内没有再次触发事件,则执行函数,否则重新开始计时。
第一段代码是直接在事件处理函数中添加了延迟执行的代码,而第二段代码是将防抖函数封装成了一个函数,可以在多个事件处理函数中使用。
具体区别如下:
1. 可复用性:第二段代码把防抖函数封装成了一个可复用的函数,可以在多个事件处理函数中使用,而第一段代码只能在该事件处理函数中使用。
2. 可扩展性:第二段代码可以在不修改原有代码的情况下,通过传入不同的函数和时间参数来扩展防抖功能,而第一段代码需要修改原有代码来实现扩展。
3. 可读性:第二段代码通过将防抖函数封装成一个独立的函数,使代码更加简洁易懂,而第一段代码可能会使代码变得臃肿难懂。
总之,第二段代码更加灵活、可复用和可扩展,而且代码更加简洁易懂。
相关问题
let timer // txta.oninput = function (e) { // clearTimeout(timer) // timer = setTimeout(() => { // console.log(this.value) // }, 1000) // }
这段代码中,首先定义了一个变量 `timer`,然后给 `txta` 绑定了一个 `oninput` 事件。每当用户在 `txta` 中输入时,先会清除之前设置的定时器 `timer`,然后重新设置一个定时器,定时器回调函数中会输出 `txta` 元素的值。
这段代码的作用是在用户输入时,等待一段时间(这里是 1 秒),如果在这段时间内用户没有继续输入,才会执行回调函数。这可以避免频繁地执行回调函数,减轻浏览器的负担,提高用户体验。
const debouce = (fn, ms)=>{ let timer = null; return function() { if (timer) clearTimeout(timer); timer = setTimeout(fn.bind(this), ms); }; }; // 绑定input事件 document.querySelector("textarea").oninput = debouce(function() { console.log(this) console.log("替换一次"); let content = this.value; // 替换敏感字 content = content.replace(/sm/gi, "**"); // 重新设置 this.value = content; }, 500);
这段代码是一个用于实现输入框的防抖功能的函数。当用户输入内容时,会触发debouce函数中返回的函数。该返回的函数内部使用了setTimeout函数来延迟执行传入的回调函数fn。
在这个例子中,回调函数是一个匿名函数,它会在用户输入结束后的500毫秒内执行。在回调函数内部,首先清除之前设置的定时器(如果存在),然后再次设置新的定时器。这样就能保证只有用户输入结束后的500毫秒内没有新的输入操作,才会执行回调函数。
在回调函数中,通过this.value获取输入框的当前内容,并将其存储在content变量中。然后使用正则表达式将敏感字"sm"替换为"**",并将替换后的内容重新赋值给输入框,实现敏感字的替换效果。
总体来说,这段代码可以帮助我们在用户输入结束后再进行处理,避免频繁触发处理逻辑,提升性能和用户体验。
阅读全文