防抖函数:

/**
* [防抖函数]
* @param {func} Function [需要执行的函数]
* @param {wait} Number [间隔时间]
* 组件内调用:this.$utils.debounce(this.aa, 1000)();
*/debounce(func, wait) {let timeout;return function () {let context = this;let args = arguments;if(timeout) clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(context, args);
},wait);
};
}

组件内调用:this.$utils.debounce(this.aa, 1000)(); 感觉有点奇怪。

打比方我现在给以下结构绑一个input事件

html

<input type="text" @input="change" >

js

methods: {change() {this.$public.debounce(this.aa, 1000)();
},aa() {this.bb = 5;console.log(this.bb);
},
}

执行效果并不理想, 连续输入触发input事件并不会等我完全输入完才打印出5 。 感觉这并不是防抖呀,有没有封装过的大佬给点建议

回答

你对 debounce 的理解有问题,debounce 返回的函数,QQ号码拍卖平台地图多次触发会有 debounce 功能,比如这样

methods: { change() { this.aa();
}, aa:debounce(function() { this.bb = 5; console.log(this.bb);
},1000)
}

你在 change 里,每次生成一个新的函数,并调用,当然会有问题;

this.$public.debounce 这个用法也不合适,可以直接把工具函数放到@/utils目录里,然后需要用某个函数,就引入某个函数

import {debounce} from '@/utils'

这样打的包体积可能会更小更合适

debounce 在 lodash 里有成熟实现了,不推荐自己实现debounce 不叫节流,节流是 throttle,两者有细微差别函数注释写错了 /**
* @description 防抖函数
* @param {Function} func 需要执行的函数
* @param {Number} wait 间隔时间
* @example
* 组件内调用:xxxxxxxx
*/

timeout确实会先延迟再执行的,你可以先执行一次再调用timeout


更多相关文章

  1. 【前端】如何向requestAnimationFrame的回调函数中传递参数
  2. 思索 p5.js 的最佳实践
  3. js变量、常量、函数类型、作用域、闭包、模板字符串
  4. js基础知识(变量、常量、函数、数据类型、函数声明及类型)
  5. 初识JS变量与常量、函数、作用域与闭包、模板字符串与标签函数
  6. js基础语法 变量 函数
  7. Vue组件为什么data必须是一个函数呢?本文案例详解
  8. 解构赋值及其在函数传参中的应用
  9. 华纳负责人yy988680

随机推荐

  1. 安卓巴士Android开发神贴
  2. 制作linux根文件系统
  3. android surfaceView手势放大缩小处理、
  4. Android Jni开发环境搭建
  5. Android Studio开发-day3 UI界面设计
  6. Android 滑动效果入门篇(一)—— ViewFlipp
  7. androidUI设计之旅 ----布局文件属性解析
  8. 8 Android平台开发-WIFI 驱动移植 -- 详
  9. Android的通知栏点击后无反应解决办法
  10. Android切近实战(五)