<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="button" value="btn" id="btn">
<script>
let btn = document.querySelector('#btn')
btn.addEventListener('click', fu)
function say() {
console.log(123)
}
function fu() {
process()
fusion(say, 1000)()
}
let process = once(say)
function fusion(fn, delay) {
let preTime = Date.now()
let timer = null
if (timer) clearTimeout(timer)
return args => {
timer = setTimeout(() => {
if (Date.now() - preTime < delay) return
say.call(this, args)
preTime = Date.now()
timer = null
}, delay)
}
}
function once(fn) {
let called = false
return args => {
if (called) return
fn.apply(this, args)
called = true
}
}
</script>
</body>
</html>