闭包之节流防抖 / 在Vue中使用节流和防抖

  • Post author:
  • Post category:vue




前言

闭包这个东西,不仅对于ES(ECMAScript)语言的初学者来说是很难理解的一个东西,而且对于许多做了很多项目的“老手”来说,可能也会栽跟头。

而节流和防抖这两个极具应用价值的闭包实现,更是容易让人云里雾里,网上容易找到的节流和防抖函数,如果不能深入理解,也是很难移植到自己的项目中的。

而我写这篇博客的原因,就是因为一个和我同期的“老手”在这里栽了个大跟头。

由于此问题在vue上产生,我就在vue上解决。



一、有问题的代码片段

// 所有代码在同一文件
data () {
	return {
		lastTime: 0,
		targetData: {
			value: '1'
		}
	}
},
watch: {
	targetData: {
		handler (newVal) {
			this.throttle(this.changeElement(newVal), 1000)
		},
		deep: true
	}
},
methods: {
	throttle (func, wait) { // 节流函数
		this.lastTime= 0
		return function () {
			let now = +new Date();
			if (now - this.lastTime > wait) {
				func.apply(this, arguments)
				this.lastTime = now
			}
		}
	},
	changeElement (val) { // 目标函数
		console.log(val)
	}
}

先看以上代码,然后在心里默默想着有哪些问题,会出现什么状况,然后再往下看。

。。。

。。。



版权声明:本文为fireInNight原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。