一句话概括防抖和节流的区别

防抖 防抖函数原理:把触发非常频繁的事件合并成一次去执行 在指定时间内只执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算 简易手写版: // func是用户传入需要防抖的函数 // wait是等待时间 const debounce = (func, wait) => { let timer = undefined; // 这里返回的函数是每次用户实际调用的防抖函数 // 如果已经设定过定时器了就清空上一次的定时器 // 开始一个新的定时器,延迟执行用户传入的方法 return function (...args) { if (timer) clearTimeout(timer); timer = setTimeout(() => { func.apply(this, args); }, wait); }; }; 适用场景: 文本输入的验证,连续输入文字后发送 AJAX 请求进行验证,验证一次就好 按钮提交场景:防止多次提交按钮,只执行最后提交的一次 服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次,还有搜索联想词功能类似 节流 节流函数原理:指频繁触发事件时,只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数。总结起来就是:事件按照一段时间的间隔来进行触发。 简易手写版: 时间戳实现 const throttle = (func, wait = 50) => { let lastTime = 0; return function (...args) { let now = Date....

January 10, 2023 · 1 min · 146 words · Anna.me

02-Factory Pattern 工厂模式-vanilla篇

通过工厂模式,我们可以使用工厂函数来创建新对象。当一个函数不使用 new 关键字来返回一个新对象时,它就是一个工厂函数。 假设我们的应用程序需要许多用户。我们可以使用 firstName 、 lastName 和 email 属性创建新用户。工厂函数还将 fullName 属性添加到新创建的对象中,该属性返回 firstName 和 lastName 。 const createUser = ({ firstName, lastName, email }) => ({ firstName, lastName, email, fullName() { return `${this.firstName} ${this.lastName}`; }, }); 现在我们可以通过调用 createUser 函数轻松创建多个用户。 const user1 = createUser({ firstName: "Anna", lastName: "Cheng", email: "AnnaCheng@gmail.com", }); 如果我们要创建相对复杂且可配置的对象,工厂模式会很有用。键和值的值可能取决于特定的环境或配置。使用工厂模式,我们可以轻松创建包含自定义键和值的新对象。 const createObjectFromArray = ([key, value]) => ({ [key]: value, }); createObjectFromArray(["name", "John"]); // { name: "John" } 优点 当我们必须创建多个共享相同属性的较小对象时,工厂模式非常有用。工厂函数可以根据当前环境或用户特定的配置轻松返回自定义对象。...

1 min · 127 words · Anna.me