/**
 * @param {Function} fn 需要执行的方法，因this指向问题，建议不使用箭头函数，
 * @param {Number} delay 间隔时间，默认值100
 * @param {Boolean} promptly 是否立即执行，默认false
 * **/
export const debounce = (fn, delay = 100, promptly) => {
	let timer = null
	return function (...args) {
		// 立即执行
		if (promptly) {
			// 当timer为null时执行
			if (!timer) fn.apply(this, args)
			if (timer) {
				clearTimeout(timer)
			}
			timer = setTimeout(() => {
				timer = null
			}, delay)
		} else {
			if (timer) {
				clearTimeout(timer)
			}
			timer = setTimeout(() => {
				fn.apply(this, args)
			}, delay)
		}
	}
}
/**
 * @param {Function} fn 需要执行的方法，因this指向问题，建议不使用箭头函数，
 * @param {Number} delay 间隔时间，默认值100
 * **/
const throttle = (fn, delay = 100) => {
	let valid = true
	return function (...args) {
		if (!valid) {
			return
		}
		valid = false
		fn.apply(this, args)
		setTimeout(() => {
			valid = true
		}, delay)
	}
}
