想要实现test函数在同步代码中多次调用时只执行最后一次的调用:
function delayExec(cb) {
}
const test = delayExec(() => console.log(1))
// 只打印一次
setTimeout(() => {
test()
test()
}, 1000)
我想了会只想出这种:
function delayExec(cb) {
let fn
Promise.resolve().then(() => fn && fn())
return () => {
fn = cb
}
}
但是这样必须在得到test
后立即执行,中间不能有非同步的代码
虽然想要的效果和只执行第一次是一样的,但是就是想知道这种能不能实现
如果是只运行每次同步的第一次可以这么写
因为最终运行的都是cb,那么第几次的区别就是参数,所以可以把参数存下来